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

时间:2017-09-21 01:31:50

标签: python numpy

我最近正在阅读一个开源项目的源代码。当程序员想要将array([0, 1, 2])之类的行向量转换为array([[0], [1], [2]])之类的列向量时,会使用np.reshape(x, (-1,1))。 在评论中,它说重塑是必要的,以保持与[:, np.newaxis]没有的数据连续性。

我尝试了两种方式,看起来他们会返回相同的结果。那么数据邻接保存在这里意味着什么呢?

1 个答案:

答案 0 :(得分:1)

两种方式都返回完全相同数据的视图,因此“数据连续性”可能不是问题,因为数据没有变化,只有视图被更改。请参阅Numpy: use reshape or newaxis to add dimensions

然而,使用.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]]])