说我做了一个奇怪的小阵列:
>>> a = np.array([[[1,2,3],4],[[4,5,6],5]])
>>> a
array([[[1, 2, 3], 4],
[[4, 5, 6], 5]], dtype=object)
然后将第一列作为切片:
>>> b = a[:,0]
>>> b
array([[1, 2, 3], [4, 5, 6]], dtype=object)
>>> b.shape
(2,)
说我现在想要重塑b,使其形状为(2,3):
>>> b.reshape((-1,3))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: total size of new array must be unchanged
我认为numpy将b中的每个数组视为一个对象而不是一个数组本身。问题是,是否有一种很好的方法可以进行所需的调整大小?
答案 0 :(得分:3)
在您的特定示例中,您可以使用numpy.vstack:
import numpy as np
a = np.array([[[1,2,3],4],[[4,5,6],5]])
b = a[:,0]
c = np.vstack(b)
print c.shape # (2,3)
编辑:由于数组a
不是真正的矩阵,而是数组的集合(如wim所指出的),您还可以执行以下操作:
b = np.array([ line for line in a[:,0]])
print b.shape #(2,3)
答案 1 :(得分:2)
您无法更改b
的形状,但可以使用np.vstack(b)
创建所需形状的副本。我想你可能已经知道了这么多。
请注意,您没有在a
的第一列中创建数组,如果您检查type(a[0,0])
,您会看到实际上有一个列表。即你的切片a[:,0]
实际上是两个列表对象的列向量,它本身不是(并且从来没有)一个数组。