np.array() 给出错误:2 维后形状不均匀。检测的形状为(31,3)+不均匀部分

np.array() gives error: inhomogeneous shape after 2 dimensions. The detected shape was (31, 3) + inhomogeneous part

提问人:Oleksandr Nekrashevych 提问时间:11/2/2023 最后编辑:mkrieger1Oleksandr Nekrashevych 更新时间:11/2/2023 访问量:89

问:

我遇到了一个错误,我无法修复。

    finBlackSourceMoves = np.array(finBlackSourceMoves)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (31, 3) + inhomogeneous part.

我正在尝试将以下列表更改为numpy数组:

[[11, 27, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [2, 38, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [38, 45, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [12, 20, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [5, 33, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [1, 11, [[2, 3, 4, 5, 6, 4, 3, 
2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [33, 24, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [24, 17, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [8, 16, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [10, 18, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [6, 21, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [27, 36, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [21, 36, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [13, 21, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [15, 23, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [17, 10, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [10, 37, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [3, 12, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 
0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [4, 3, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [3, 12, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [7, 4, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 
0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [0, 4, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [12, 13, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 
0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [13, 4, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [4, 13, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [14, 22, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [21, 29, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 
7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [23, 31, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 
7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [13, 14, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 
7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]], [14, 21, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 
7], [8, 9, 10, 11, 12, 10, 9, 8]]], [22, 30, [[2, 3, 4, 5, 6, 4, 3, 2], [1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [7, 7, 7, 7, 7, 7, 7, 7], [8, 9, 10, 11, 12, 10, 9, 8]]]]

但它抛出了上面的错误,声称它有一个不均匀的部分或形状,但我确信我正在发送大小一致的子数组,即两个整数和一个 8x8 的 2d 整数数组。

所以 [integer, integer, [8][8]integer]。

是什么原因导致的?

python 数组列表 numpy

评论

0赞 mkrieger1 11/2/2023
错误消息所说的内容和您描述的内容正是导致这种情况的原因。并非列表中的所有元素都具有相同的形状。
0赞 hpaulj 11/2/2023
您的子列表可能是一致的,但它们仍然是“不均匀的”。您似乎并不欣赏多维整数数组的样子。你可以用所有的“两个整数”或所有的 8x8 做一个 arrray,但你不能把它们混合在一起。详细说明你想要的数组类型(shape、dtype)
0赞 Oleksandr Nekrashevych 11/2/2023
我明白了,所以如果我将 2d 数组展平为 64 个项目的 1d 数组,这将是一个可行的解决方案吗?我认为最终形状对我来说并不重要,我只需要将信息作为整数或浮点数 dtype 中的 3 个独立元素。

答:

0赞 hpaulj 11/2/2023 #1

复制粘贴并分配给:x

In [277]: len(x)
Out[277]: 31

In [278]: x[0]
Out[278]: 
[11,
 27,
 [[2, 3, 4, 5, 6, 4, 3, 2],
  [1, 1, 1, 1, 1, 1, 1, 1],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0],
  [7, 7, 7, 7, 7, 7, 7, 7],
  [8, 9, 10, 11, 12, 10, 9, 8]]]

将整数收集到一个列表和数组中:

In [279]: data1=[i[:2] for i in x]    
In [281]: np.array(data1).shape
Out[281]: (31, 2)

8x8 部分相同:

In [283]: data2=[i[2] for i in x]    
In [284]: np.array(data2).shape
Out[284]: (31, 8, 8)

评论

0赞 Oleksandr Nekrashevych 11/2/2023
非常感谢!我真的很感激:D。但是由于您之前的评论,我才弄清楚了,我不完全理解在这种情况下形状的含义,并且要使数组“同质”,元素需要具有相同的数据类型和相同的结构/形状,所以我最终只是展平了 8x8,然后只是附加了前两个整数,它起作用了。
0赞 hpaulj 11/2/2023
对于此类问题,错误消息一直在演变。最初只是被打赌,并在可以制作普通数组时制作了一个 dtype 数组。然后它开始警告您需要指定 dtype。现在它提出了这个“异构”错误,我同意这没有帮助。但是有很多带有该消息的 SO 示例,都说您正在尝试从格式不佳的数据中制作数组。np.arrayobjectobject