从ND到一维阵列

问题描述

使用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()返回viewa时候可能。因此,修改b也会修改a。当1D元素在内存中连续时ravel()返回aview,但是copy例如如果返回是a通过使用非单位步长(例如a = x[::2])对另一个数组进行切片而得到的,则返回a 。

如果要复制而不是视图,请使用

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]

解决方法

说我有一个数组a

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

array([[1,6]])

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

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

但这又回来了

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

这与以下内容不同:

array([1,6])

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

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

但这需要我知道原始数组有多少个维数(并在使用较大维数时将[0]连接起来)

有没有一种与尺寸无关的方式来从任意ndarray获取列/行向量?

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”