从ND到1D阵列

2024-04-24 18:45:54 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个数组a

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

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

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

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

但这又回来了

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

这与:

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

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

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

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

是否有一种独立于维度的方法从任意ndarray获取列/行向量?


Tags: 方法元素np数组手动productarray向量
3条回答
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])

最简单的方法之一是使用flatten(),如下例所示:

 import numpy as np

 batch_y =train_output.iloc[sample, :]
 batch_y = np.array(batch_y).flatten()

我的阵列是这样的:

    0
0   6
1   6
2   5
3   4
4   3
.
.
.

使用flatten()后:

array([6, 6, 5, ..., 5, 3, 6])

这也是解决此类错误的方法:

Cannot feed value of shape (100, 1) for Tensor 'input/Y:0', which has shape '(?,)' 

使用np.ravel(用于1D视图)或np.flatten(用于1D副本)或np.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()在可能的情况下返回viewa。所以修改b也会修改aravel()当1D元素在内存中是连续的时返回view,但如果通过使用非单位步长(例如a = x[::2])对另一个数组进行切片而生成a,则返回copy

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

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

如果只需要迭代器,请使用np.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]

相关问题 更多 >