【发布时间】:2019-12-14 05:40:25
【问题描述】:
我正在用未知大小的列表填充一个 numpy 网格,因为 list.append 比 np.concatenate 更好用(不过,也许我过早地优化了)。
这些不起作用:
foo = np.full((3, 4), [])
bar = np.full((3, 4), [], dtype=object)
Numpy 只是假设我的 [] 是一个用于填充结果的 numpy 数组并且是错误的形状。
它适用于字典:
foo = np.full((3, 4), {})
有没有办法做到这一点?
编辑:实际上,即使使用 numpy 数组,我也不知道该怎么做。我想要一个 2x2 网格,每个单元格中都有可变长度的列表或数组。
编辑 2:我真正想要的是 scipy.stats.binned_statistic_2d 之类的东西,但我想保留源数据,而不是每个 bin 中的统计信息。
【问题讨论】:
-
full和可变对象的另一个问题是它在每个插槽中都引用了相同的对象,因此您最终会遇到与使用[{}]*3制作列表列表相同的排序问题 -
使用
numpy.ndarray的list对象是没有意义的。 dtype=object 的nd.array几乎只是一个蹩脚的、效率较低的列表。只需使用列表列表即可。 -
我在下面接受了一个很好的答案,@juanpa.arrivillaga,但我认为你可能是对的
-
我会支持@juanpa.arrivillaga 所说的。我很失望接受的答案甚至没有提到它。如果您可以分享更多有关您需要此功能的信息,我们也许可以找到更好的选择。
-
我认为接受的答案是我问题的正确答案。但我最终做的是制作一个列表列表,使用 np.digitize 确定每个具有 x 和 y 位置历史的对象的网格目标,并将时间戳+对象引用对附加到每个网格目标列表。基本上,我试图将 (time, x, y) 对象放在二维网格中,并且我的源数据在时间戳和位置上都是稀疏的。然后我对这些网格列表进行后处理以创建有代表性的汇总数据。