NumPy非矩形数组的内部矩形数组的元素形状不正确

时间:2019-01-21 16:04:01

标签: python numpy

在下面的代码中,我构造了一个由两个不同的数组组成的数组。此代码示例模拟了原始问题的数据,这就是为什么存在两个不同的数组并以这种方式访问​​它们的原因。构造数组后,将其转换为numpy并转置后,我只想访问第二个列表。但是,一旦有了第二个列表,它便是由列表对象组成的,尽管它是矩形的(值的格式为(10,5))有人知道为什么会这样吗?在仍然以这种方式访问​​数据的同时,有什么方法可以避免它?

big_array = []

big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])
big_array.append([[0, 0],[0,0,0,0,0]])

big_array = np.asarray(big_array).transpose()
eval_array = big_array[1]
print(eval_array)
print(eval_array.shape)

以下是照片的输出:

[list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0])
 list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0])
 list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0]) list([0, 0, 0, 0, 0])
 list([0, 0, 0, 0, 0])]
(10,)

很明显,上面输出中的数组是矩形,但是我想它还没有被识别出来。

2 个答案:

答案 0 :(得分:0)

您要声明“显然,数组是矩形的”,但这不是真的:)

看看这个[[0,0],[0,0,0,0,0]]。这是一个一维数组,其中包含:

  • 具有2个元素的数组
  • 具有5个元素的数组

这不是矩形。

[[0,0],[0,0],[0,0],[0,0],[0,0]](5,2)或[[0,0,0,0,0],[0,0,0,0,0]](2,5)是。

为了获得您似乎正在寻找的数组效果,您需要内部数组(属于同一维的一部分)的大小相等。

big_array = []

big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])
big_array.append([[0,0,0,0,0],[0,0,0,0,0]])

np_arr = np.array(big_array)
np_arr.shape
> (10, 2, 5)

答案 1 :(得分:-1)

初始化不是矩形的数组时,元素是对象。换位表示时,即使内部元素为矩形,NumPy也会保留这些数组的对象类型。之所以看到您所看到的,是因为您转置了一个对象数组,结果得到了一个对象数组。

可以使用以下代码获得正确的形状:

np.asarray(eval_array.tolist())

避免这种情况的方法是从矩形数组开始。