如何将(5,)numpy数组转换为(5,1)?

mrg*_*oom 5 python arrays numpy

如何将(5,)numpy数组转换为(5,1)?

以及如何从(5,1)向后转换为(5,)?

(5,)数组的用途是什么,为什么省略一维?我的意思是为什么我们不总是使用(5,1)形式?

这是否仅在1D和2D数组上发生,还是在3D数组上发生,例如(2,3,)数组可以存在吗?

更新:

我设法通过(5,)转换为(5,1)

a= np.reshape(a, (a.shape[0], 1)) 
Run Code Online (Sandbox Code Playgroud)

但建议的变体看起来更简单:

a = a[:, None] or a = a[:, np.newaxis]
Run Code Online (Sandbox Code Playgroud)

要将(5,1)转换为(5,),可以使用np.ravel

a= np.ravel(a)
Run Code Online (Sandbox Code Playgroud)

mus*_*_ut 6

具有形状的 numpy 数组(5,)是一维数组,而具有形状的 numpy 数组(5,1)是二维数组。差异是微妙的,但可以在很大程度上改变一些计算。必须特别小心,因为这些变化可能会被扁平化所有维度的操作推倒,例如np.meannp.sum

除了@m-massias 的回答,请考虑以下示例:

17:00:25 [2]: import numpy as np
17:00:31 [3]: a = np.array([1,2])
17:00:34 [4]: b = np.array([[1,2], [3,4]])
17:00:45 [6]: b * a
      Out[6]: 
array([[1, 4],
       [3, 8]])
17:00:50 [7]: b * a[:,None] # Different result!
      Out[7]: 
array([[1, 2],
       [6, 8]])
Run Code Online (Sandbox Code Playgroud)

a有形状,(2,)并在第二维上广播。所以你得到的结果是每一行(第一维)乘以向量:

17:02:44 [10]: b * np.array([[1, 2], [1, 2]])
      Out[10]: 
array([[1, 4],
       [3, 8]])
Run Code Online (Sandbox Code Playgroud)

另一方面,a[:,None]具有形状(2,1),因此向量的方向已知为列。因此,您得到的结果来自以下操作(其中每列乘以a):

17:03:39 [11]: b * np.array([[1, 1], [2, 2]])
      Out[11]: 
array([[1, 2],
       [6, 8]])
Run Code Online (Sandbox Code Playgroud)

我希望这能说明这两个阵列的行为方式有何不同。