python NumPy:创建对象的ndarray

cs7cruho  于 2023-01-19  发布在  Python
关注(0)|答案(2)|浏览(106)

我喜欢创建一个numpy数组--形状为[2,3],其中每个数组元素是一个列表。是的,我知道这效率不高,甚至不可取,所有的理由都是这样的--但这能做到吗?
所以我想要一个2x 3的数组,其中每个点都是长度为2的向量,而不是2x 3x 2的数组,是的,真的。
如果我把它弄得破烂不堪,它就起作用了:

>>> np.array([[0, 0], [0, 1], [0, 2], [1, 0], [9, 8], [2, 4, -1]], dtype=object).reshape([2, 3])
array([[list([0, 0]), list([0, 1]), list([0, 2])],
       [list([1, 0]), list([9, 8]), list([2, 4, -1])]], dtype=object)

但是如果numpy can 使它完全适合,它就会这样做,并抛出一个错误:

>>> np.array([[0, 0], [0, 1], [0, 2], [1, 0], [9, 8], [2, 4]], dtype=object).reshape([2, 3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot reshape array of size 12 into shape (2,3)

所以,抛开你认为这是一件愚蠢的事情的直觉不谈(确实如此,我知道这一点),我能不能让最后一个例子以某种方式创建一个shape 2x 3数组,其中每个元素都是长度为2的Python列表,而不需要numpy强制它成为2x 3x 2?

xpcnnkqh

xpcnnkqh1#

首先,您应该创建一个具有预期形状的对象数组。
然后,使用list填充数组。

l = [[[0, 0], [0, 1], [0, 2]], [[1, 0], [9, 8], [2, 4]]]
arr = np.empty((2, 3), dtype=object)
arr[:] = l
z18hc3ub

z18hc3ub2#

您可以创建一个空数组,然后手动用对象填充它:

>>> a = np.empty((3,2), dtype=object)
>>> a
array([[None, None],
       [None, None],
       [None, None]], dtype=object)
>>> a[0,0] = [1,2,3]
>>> a
array([[list([1, 2, 3]), None],
       [None, None],
       [None, None]], dtype=object)

相关问题