np.reshape(x, (-1,1)) vs x[:, np.newaxis]

6
我最近在阅读一个开源项目的源代码。当程序员想要将一个行向量如array([0, 1, 2])转换为一个列向量,如array([[0], [1], [2]])时,使用了np.reshape(x, (-1,1))。在注释中,它说reshape是必要的,以保持数据的连续性,而[:, np.newaxis]则不能做到这一点。
我尝试了这两种方法,看起来它们会返回相同的结果。那么这里的数据连续性保持是什么意思呢?

这个故事的某些部分在重复讲述中失去了一些内容。例如,“行向量”的部分似乎是不正确的;一个真正的1乘以任何数的行向量将对这些操作有不同的响应。 - user2357112
1个回答

10

两种方式都返回相同数据的视图,因此“数据连续性”可能不是问题,因为数据没有改变,只有视图改变了。参见Numpy:使用reshape或newaxis添加维度

然而,使用.reshape((-1,1))可能存在实际优势,因为它将数组重塑为2D数组,而不考虑原始形状。对于[:, np.newaxis],结果将取决于数组的原始形状,具体如下:

In [3]: a1 = np.array([0, 1, 2])

In [4]: a2 = np.array([[0, 1, 2]])

In [5]: a1.reshape((-1, 1))
Out[5]: 
array([[0],
       [1],
       [2]])

In [6]: a2.reshape((-1, 1))
Out[6]: 
array([[0],
       [1],
       [2]])

In [7]: a1[:, np.newaxis]
Out[7]: 
array([[0],
       [1],
       [2]])

In [8]: a2[:, np.newaxis]
Out[8]: array([[[0, 1, 2]]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接