数组resiz中的numpy数组

2024-04-25 01:49:41 发布

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

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

>>> 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中的每个数组当作一个对象,而不是把它本身当作一个数组。问题是,有没有一个好的方法来调整所需的大小?


Tags: mostobjectnp切片数组callarraylast
2条回答

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

注意,您没有在a的第一列中创建数组,如果检查type(a[0,0]),您将看到实际上有一个列表。i、 你的切片a[:,0]实际上是两个列表对象的列向量,它本身不是(也从来不是)数组。

在您的特定示例中,可以使用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)

相关问题 更多 >