from numpy import array
test_list = [[1,2],3]
x = array(test_list) #ValueError: setting an array element with a sequence.
基本上,我有一个带有2个坐标和一个刻度的点,我试图把几个放在ndarray上,但我现在不能这样做。我可以使用[1,2,3],但我很好奇为什么我不能将这种类型的列表存储在数组中。
答案 0 :(得分:3)
它失败了,因为数组是非矩形的。如果我们将3
更改为[3, 4]
,则可以正常工作。
>>> array([[1, 2], [3, 4]])
array([[1, 2],
[3, 4]])
答案 1 :(得分:0)
你可以做到
x = array([[1,2],3], dtype=object_)
它为您提供了一个带有通用“对象”dtype的数组。但这并没有让你走得太远。即使你做了
x = array([array([1,2]),3], dtype=object_)
你有x [0]是一个数组,但你仍然无法索引x [0,0],你必须做x [0] [0]。
这是一种耻辱;有些地方可以做这样的事情,然后做x.sum(1)并得到[3,3]作为结果。 (你总是可以做地图(总和,x)。)
答案 2 :(得分:0)
如果您确实需要非矩形数组,可以尝试awkward
:
In [1]: import awkward
In [2]: test_list = [[1,2],3]
In [3]: x = awkward.fromiter(test_list)
In [4]: x
Out[4]: <UnionArray [[1 2] 3] at 0x7f69c087c390>
In [5]: x + 1
Out[5]: <UnionArray [[2 3] 4] at 0x7f69c08075c0>
In [6]: x[0]
Out[6]: array([1, 2])
In [7]: x[0, 1]
Out[7]: 2
它的行为类似于numpy
数组。