数组中的numpy数组调整大小

时间:2012-10-24 12:54:30

标签: python numpy

说我做了一个奇怪的小阵列:

>>> 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中的每个数组视为一个对象而不是一个数组本身。问题是,是否有一种很好的方法可以进行所需的调整大小?

2 个答案:

答案 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]实际上是两个列表对象的列向量,它本身不是(并且从来没有)一个数组。