小编典典

从 ND 到 1D 阵列

all

假设我有一个数组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 获取列/行向量的与维度无关的方法?


阅读 119

收藏
2022-07-28

共1个答案

小编典典

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

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()返回 a viewof a。所以修改b也会修改a. 当 1D 元素在内存中连续时返回
a,但ravel()如果是使用非单位步长(例如)对另一个数组进行切片,则返回 a。view``copy``a``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]
2022-07-28