为什么我不能像这样创建一个numpy数组:array([1,2],3)

时间:2010-12-24 00:14:27

标签: python numpy

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],但我很好奇为什么我不能将这种类型的列表存储在数组中。

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数组。