为什么我不能这样创建numpy数组:array([1, 2], 3)
from numpy import array
test_list = [[1,2],3]
x = array(test_list) #ValueError: setting an array element with a sequence.
简单来说,我有一个点,它有两个坐标和一个缩放比例,我想把几个这样的点放到一个ndarray里,但现在做不到。我本来可以用[1,2,3]这样的列表,但我很好奇为什么我不能把这种类型的列表存储在数组里。
3 个回答
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
数组很相似。
0
你可以这样做:
x = array([[1,2],3], dtype=object_)
这样会得到一个包含“对象”类型的数组。但这并不能让你走得太远。即使你这样做:
x = array([array([1,2]),3], dtype=object_)
你会发现 x[0] 是一个数组,但你还是不能用 x[0,0] 来访问它,你得用 x[0][0]。
这真可惜;有些地方如果能这样做就会很有用,比如你可以接着用 x.sum(1) 来得到结果 [3, 3]。(你总是可以用 map(sum, x) 来实现。)
3
这个问题出现是因为数组的形状不规则。如果我们把 3
改成 [3, 4]
,那么就可以正常运行了。
>>> array([[1, 2], [3, 4]])
array([[1, 2],
[3, 4]])