数据操作

做了一下,不知道对不对。。

2 Likes

源码:def reshape(self, *shape: _int)。
*shape可以接收元组,也可分开接收。

3 Likes

@AI_M 我还是没弄明白 :sob: :heart:

使用 arange 创建一个行向量 x这里,其实创建的是一维向量吧?无关行向量还是列向量?(根据我查到的资料显示)

练习的第二问为什么我的没有实现

  1. ⽤其他形状(例如三维张量)替换⼴播机制中按元素操作的两个张量。结果是否与预期相同?
1 Like

我猜测是因为3不能被2整除导致无法进行广播。如果你将X形状改变为(2,1,3),将Y形状改变为(1,3,1),那么应该可以顺利实现广播。

2 Likes

谢谢,是的,由于广播原则的限制,从直观上也可以理解,扩展的时候无法确定是按照2中的哪个元素复制,所以不可以进行。(原问题已解决)

我个人总结的广播原则:
维度按照右对齐后,需要复制的维度只有一行/列或者为空,其余行/列不需要复制。

这个可以复制成功,因为需要复制的维度全部是1
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
a+b

可以复制成功,因为右对齐后第一个维度为空,且要复制的维度为1
a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((2))
a+b

这个无法复制,因为要复制的有两列
a = torch.arange(18).reshape((3,6))
b = torch.arange(6).reshape((3,2))
a+b

这种可以复制,因为只有一行需要复制
a = torch.arange(18).reshape((3,6))
b = torch.arange(6).reshape((1,6))
a+b

这种不能复制,因为第一维需要复制的有两行

a = torch.arange(12).reshape((2,2,3))
b = torch.arange(12).reshape((6,2,1))
a+b

6 Likes

两个张量的维度大小向右对齐,触发广播机制的条件:
a. 同一维度大小相等;
或 b. 某个维度 一个张量有,另一个张量没有 ;
或 c. 某个维度 一个张量有,另一个张量也有且大小不同,但大小是1。
参考

1 Like

我用的是python3.9.12,方法2中改变a的形状,例如 a = numpy.ones(6),b不会改变;但是改变a某个元素的值,b会改变,这是为什么

2.1.2开头的末尾:我们使用逗号来表示一个具有5个元素的元组;好像写错了,下面明明是4个元素

a = torch.reshape(torch.arange(3),(3, 1))

初学小白。想知道torch.tensor(3.5)和torch.tensor([3.5])有什么区别。

广播机制

请问在哪里找到的源码,我在官网仓库没有看到这个代码呀

你可以看一下官方文档里说的很清楚了,就是等价的。

1 Like

有没有可能这俩就是没有区别呢 :wink::wink::wink::wink::wink:

广播机制:
两个数组做按元素算术操作,先从右至左比较维度,在以下两个条件下执行操作,
1.该维度元素个数相等;
2.其中一个为1.

可以补充一下张量的底层实现,存储视图以及张量的大小、偏移量、步长。把这一部分作为拓展放出来,这一部分还是有必要了解一下的。

2.1.5小节中,为什么说“ 如果在后续计算中没有重复使用X”呢?