Python 如何将(5,)numpy数组转换为(5,1)?
如何将(5,)numpy数组转换为(5,1) 以及如何从(5,1)向后转换为(5,) (5,)数组的用途是什么,为什么省略一维?我的意思是为什么我们不总是使用(5,1)形式 这种情况是只发生在一维和二维数组中,还是发生在三维数组中,比如(2,3,)数组是否存在 更新: 我成功地从(5,)转换到(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
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)