数据操作

https://zh-v2.d2l.ai/chapter_preliminaries/ndarray.html

  1. 开头第二段 “感觉怼本部分很熟悉” typo: 怼 -> 对
  2. 2.1.2. 运算 第二段 u_i$ 前面少 $
  3. 2.1.2. 运算,有句话重复了?——“我们也可以把多个张量连结在一起,把它们端对端地叠起来形成一个更大的张量。 我们也可以 连结 (concatenate) 多个张量在一起,将它们端到端堆叠以形成更大的张量。”
  4. 2.1.6. 转换为其他 Python 对象 “当你在 CPU 或 GPU 上执行操作的时候,此时Python的NumPy包也希望使用相同的内存块执行其他操作时,你不希望停止计算。” 这句话或许可以将原文的等待(waiting to see whether) 也翻译出来?(可能只是我看中文版的这句话没怎么看懂 :wink:

Thanks @thebesttv ! 如果哪些语句可以改进,请发 PR 做 d2l 的 contributor!

前面y = x.reshape(3, 4)
后面
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
没闹明白,为啥有的时候用reshape(),有时候用reshape(()),运行结果也没看出区别

torch文档里:torch.reshape`( input, shape) → Tensor
input的数据是Tensor类型.
shape是期望新的shape.
我是这么理解的:
y = x.reshape(3, 4)是torch下的tensor实例对象x的方法,a = torch.arange(3).reshape((3, 1))里面用的是torch文档里的方法。
两个方法只是形式看起来不一样:对于对象x的实例方法,当在python类里每次定义方法时都需要绑定这个实例self,就是reshape(self, shape),因为实例方法的调用离不开实例,我们需要把实例自己传给函数,调用的时候是这样的x.reshape(),其实就相当于是reshape(x, shape)

My answer: 第二章

1 Like

您好,
用pytorch的时候,您的书里面说:
“转换为 NumPy 张量很容易,反之也很容易。转换后的结果不共享内存“
但pytorch documentation说:
“Tensors on the CPU and NumPy arrays can share their underlying memory locations, and changing one will change the other.”
似乎最新版pytorch里的numpy()和from_numpy()会共享内存。英文版的书里也有这个问题。

1 Like

you are right,they share same 内存

.numpy.from_numpy方法是可以共享内存的,但如果使用torch.tensor(ndarray)由numpy数组生成tensor,就不会共享内存。