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

Python 如何将(5,)numpy数组转换为(5,1)?,python,arrays,numpy,Python,Arrays,Numpy,如何将(5,)numpy数组转换为(5,1) 以及如何从(5,1)向后转换为(5,) (5,)数组的用途是什么,为什么省略一维?我的意思是为什么我们不总是使用(5,1)形式 这种情况是只发生在一维和二维数组中,还是发生在三维数组中,比如(2,3,)数组是否存在 更新: 我成功地从(5,)转换到(5,1)的时间 但建议的变体看起来更简单: a = a[:, None] or a = a[:, np.newaxis] 要将(5,1)转换为(5),可以使用 a= np.ravel(a) 通过执行a

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

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

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

这种情况是只发生在一维和二维数组中,还是发生在三维数组中,比如(2,3,)数组是否存在

更新:

我成功地从(5,)转换到(5,1)的时间

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

a = a[:, None] or a = a[:, np.newaxis]
要将(5,1)转换为(5),可以使用

a= np.ravel(a)

通过执行
a=a[:,None]
a=a[:,np.newaxis]


至于“忽略一维”,我不太理解你的问题,因为它没有尽头:数组可以是
(5,1,1)
,等等。

一个带有形状
(5,)
的numpy数组是一维数组,而带有形状
(5,1)
的数组是二维数组。这种差异很微妙,但可以在很大程度上改变某些计算。我们必须特别小心,因为这些变化可能会被展平所有维度的操作(如
np.mean
np.sum
)所掩盖

除了@ M- Masas的回答之外,考虑下面的例子:

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]])
a
具有形状
(2,)
,并且在第二维度上。因此,得到的结果是每一行(第一个维度)乘以向量:

17:02:44 [10]: b * np.array([[1, 2], [1, 2]])
      Out[10]: 
array([[1, 4],
       [3, 8]])
另一方面,
a[:,None]
具有
(2,1)
的形状,因此已知向量的方向为列。因此,您得到的结果来自以下操作(其中每列乘以
a
):

我希望这能说明这两个数组的行为会有什么不同。

使用整形()函数 例如 打开python终端并键入以下内容:

    >>> import numpy as np
    >>> a = np.random.random(5)
    >>> a
    array([0.85694461, 0.37774476, 0.56348081, 0.02972139, 0.23453958])
    >>> a.shape
    (5,)
    >>> b = a.reshape(5, 1)
    >>> b.shape
    (5, 1)

.. 如果这些都是答案,为什么是注释?不需要“占位符”注释,而且通常需要两分钟以上才能找到一个好的dup目标。为什么要有第二维度?你是难民吗?:)@hpaulj有时sklearn需要一个二维的特性数组。我不认为重复的建议是好的,因为它所建议的答案在这种情况下都不起作用。
17:03:39 [11]: b * np.array([[1, 1], [2, 2]])
      Out[11]: 
array([[1, 2],
       [6, 8]])
    >>> import numpy as np
    >>> a = np.random.random(5)
    >>> a
    array([0.85694461, 0.37774476, 0.56348081, 0.02972139, 0.23453958])
    >>> a.shape
    (5,)
    >>> b = a.reshape(5, 1)
    >>> b.shape
    (5, 1)