4

假设我做了一个奇怪的小数组:

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

4

2 回答 2

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)
于 2012-10-24T13:06:46.883 回答
2

您不能b就地更改形状,但您可以使用 创建所需形状的副本np.vstack(b)。我想你可能已经知道了这么多。

请注意,您没有在 的第一列中创建数组a,如果您检查,type(a[0,0])您会发现那里实际上有一个列表。即您的切片a[:,0]实际上是两个列表对象的列向量,它本身不是(也从来不是)一个数组。

于 2012-10-24T13:05:07.417 回答