gpt4 book ai didi

python - 如何创建一个 numpy 数组,其元素是其他 numpy 数组对象?

转载 作者:行者123 更新时间:2023-12-01 06:22:00 24 4
gpt4 key购买 nike

我发现自己需要创建一个 dtype="object"的 numpy 数组,其元素本身就是 numpy 数组。如果数组长度不同,我可以设法做到这一点:

arr_of_arrs = np.empty((2,2), dtype=np.object)
arr_list = [np.arange(i) for i in range(4)]
arr_of_arrs.flat[:] = arr_list
print(arr_of_arrs)

array([[array([], dtype=int32), array([0])],
[array([0, 1]), array([0, 1, 2])]], dtype=object)

但是如果它们碰巧长度相同,则它不起作用,而且我不完全确定它如何生成它给我的值:

arr_list = [np.arange(2) for i in range(4)]
arr_of_arrs.flat[:] = arr_list
print(arr_of_arrs)

[[0 1]
[0 1]]

这可行吗? numpy 似乎试图强制数据“有意义”,尽管我尽了最大努力阻止它这样做......

最佳答案

如果数组是一维,则赋值工作正常:

In [767]: arr = np.empty(4,object)                                                             
In [768]: arr[:] = [np.arange(6) for _ in range(4)]
In [769]: arr
Out[769]:
array([array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5]),
array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])], dtype=object)
In [770]: arr.reshape(2,2)
Out[770]:
array([[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])],
[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])]],
dtype=object)

我们也可以从 (2,2) 开始,但分配给 ravel() (一个 view):

In [771]: arr = np.empty((2,2),object)                                                         
In [772]: arr.ravel()[:] = [np.arange(6) for _ in range(4)]
In [773]: arr
Out[773]:
array([[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])],
[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])]],
dtype=object)

flat 显然序列化了 RHS:

In [774]: arr.flat = [np.arange(6) for _ in range(4)]                                          
In [775]: arr
Out[775]:
array([[0, 1],
[2, 3]], dtype=object)

如果 RHS 列表嵌套在右侧,我们可以直接分配给二维数组:

In [779]: alist = Out[770].tolist()                                                            
In [780]: alist # list of lists of arrays
Out[780]:
[[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])],
[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])]]
In [781]: arr = np.empty((2,2),object)
In [782]: arr[:] = alist
In [783]: arr
Out[783]:
array([[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])],
[array([0, 1, 2, 3, 4, 5]), array([0, 1, 2, 3, 4, 5])]],
dtype=object)

关于python - 如何创建一个 numpy 数组,其元素是其他 numpy 数组对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60313171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com