从 ND 到一维阵列

新手上路,请多包涵

假设我有一个数组 a

 a = np.array([[1,2,3], [4,5,6]])

array([[1, 2, 3],
       [4, 5, 6]])

我想将其转换为一维数组(即列向量):

 b = np.reshape(a, (1,np.product(a.shape)))

但这返回

array([[1, 2, 3, 4, 5, 6]])

这与以下内容不同:

 array([1, 2, 3, 4, 5, 6])

我可以将此数组的第一个元素手动转换为一维数组:

 b = np.reshape(a, (1,np.product(a.shape)))[0]

但这需要我知道原始数组有多少维度(并在处理更高维度时连接 [0])

是否有一种与维度无关的方法从任意 ndarray 获取列/行向量?

原文由 Amelio Vazquez-Reina 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 337
2 个回答

使用 np.ravel (对于一维视图)或 np.ndarray.flatten (对于一维副本)或 np.ndarray.flat (对于一维迭代器):

 In [12]: a = np.array([[1,2,3], [4,5,6]])

In [13]: b = a.ravel()

In [14]: b
Out[14]: array([1, 2, 3, 4, 5, 6])

请注意 ravel() 在可能的情况下返回 viewa 。所以修改 b 也会修改 aravel() returns a view when the 1D elements are contiguous in memory, but would return a copy if, for example, a were made使用非单位步长对另一个数组进行切片(例如 a = x[::2] )。

如果您想要副本而不是视图,请使用

In [15]: c = a.flatten()

如果您只想要一个迭代器,请使用 np.ndarray.flat

 In [20]: d = a.flat

In [21]: d
Out[21]: <numpy.flatiter object at 0x8ec2068>

In [22]: list(d)
Out[22]: [1, 2, 3, 4, 5, 6]

原文由 unutbu 发布,翻译遵循 CC BY-SA 4.0 许可协议

In [14]: b = np.reshape(a, (np.product(a.shape),))

In [15]: b
Out[15]: array([1, 2, 3, 4, 5, 6])

或者,简单地说:

 In [16]: a.flatten()
Out[16]: array([1, 2, 3, 4, 5, 6])

原文由 NPE 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题