python - 如何用空的内置列表填充 numpy 数组?
问题描述
我正在用未知大小的列表填充一个 numpy 网格,因为list.append
它比使用更好np.concatenate
(不过,也许我过早地优化了)。
这些不起作用:
foo = np.full((3, 4), [])
bar = np.full((3, 4), [], dtype=object)
Numpy 只是假设 my[]
是一个用于填充结果的 numpy 数组并且是错误的形状。
它适用于听写:
foo = np.full((3, 4), {})
有没有办法做到这一点?
编辑:实际上,即使使用 numpy 数组,我也不知道如何做到这一点。我想要一个 2x2 网格,每个单元格中都有可变长度列表或数组。
编辑 2:我真正想要的是类似scipy.stats.binned_statistic_2d
但不是每个 bin 中的统计信息,我想保留源数据。
解决方案
full
使用可变对象,即使它工作有问题:
In [10]: A = np.full(3,{})
In [11]: A
Out[11]: array([{}, {}, {}], dtype=object)
In [12]: A[0]['k']=2
In [13]: A
Out[13]: array([{'k': 2}, {'k': 2}, {'k': 2}], dtype=object)
喜欢
In [14]: [{}]*3
Out[14]: [{}, {}, {}]
它在每个插槽中放置相同的对象。
您可以创建一个“空白”对象 dtype 数组,并从列表中填充它 - 注意每个元素都是一个“新”列表:
In [15]: A = np.empty((2,2),object)
In [16]: A
Out[16]:
array([[None, None],
[None, None]], dtype=object)
In [17]: A[:] = [[[] for _ in range(2)] for _ in range(2)]
In [18]: A
Out[18]:
array([[list([]), list([])],
[list([]), list([])]], dtype=object)
In [19]: A[0,0].append(34)
In [20]: A
Out[20]:
array([[list([34]), list([])],
[list([]), list([])]], dtype=object)
frompyfunc
是创建对象 dtype 数组的好工具,其中填充了各种对象类:
In [23]: B = np.frompyfunc(lambda x:[],1,1)(np.zeros((2,2)))
In [24]: B
Out[24]:
array([[list([]), list([])],
[list([]), list([])]], dtype=object)
In [25]: B[0,0].append(34)
In [26]: B
Out[26]:
array([[list([34]), list([])],
[list([]), list([])]], dtype=object)
这也为每个元素创建了一个“新鲜”列表。
推荐阅读
- python - 尝试在 python 中绘制肯尼亚国旗颜色,遇到名称错误?
- spring-webclient - 如何避免在负载均衡的 WebClient JAVA 中放置 http 或 https
- java - 尽管输入与预期的数据类型匹配,但带有浮点数的 InputMismatchException
- node.js - 在 vue.js SPA 中的 node.js 14 中加载 UMD 的问题
- node.js - 如何使用 websockets 在计时器上发送消息
- python - 用python解析乳胶辅助文件中的引用
- javascript - 是否可以切换也具有 addeventlistener 的表单的 classList?
- flutter - 我如何在 Flutter 中为 Web 编写自定义平台特定的代码
- go - Golang 标志接受任意参数
- swift - 如何获得与原色相反的颜色?