【发布时间】:2019-08-28 08:30:23
【问题描述】:
我有一个 2D numpy 零数组、一个 numpy 数组列表(可以是不同长度)和一个索引列表。我想从二维数组中相应行索引的开头添加列表中每个数组的内容。
当然,我可以循环遍历数组。但是,我需要对许多不同的样本执行此操作。因此,我想知道是否有人知道更有效的方法来做到这一点。
In [1]: A = np.zeros((5, 5))
...: arrays = [np.random.randint(1, 10, size=(1,5)) for i in range(3)]
...: indices = [1, 3, 4]
...: print(arrays)
Out[1]:
[array([3, 1, 3, 6]), array([4, 9]), array([5, 9, 6])]
预期输出:
array([[0., 0., 0., 0., 0.],
[3., 1., 3., 6., 0.],
[0., 0., 0., 0., 0.],
[4., 9., 0., 0., 0.],
[5., 9., 6., 0., 0.]]
任何帮助将不胜感激!
【问题讨论】:
-
您通常有多少样本?通常这些样本的长度是多少?
-
A 的形状大致为 (10, 200),我有大约 700,000 个索引+数组组合。 A 的形状在所有样本中都是恒定的。在我当前的应用程序中,我循环遍历所有样本并将它们放入一个大数组中(700000、10、200)。
-
您从 2 个列表开始。其中一个列表包含大小不同的数组;所以它不能变成二维数组。除了
zip和迭代之外,您还如何处理列表? -
如果您搜索填充数组列表的问题,您会发现@Divakar 提供的一种高级方法,它使用
hstack(array)和[len(i) for i in arrays]将数组映射到A一步。您的indices使事情复杂化,尽管在填充后使用indices重新映射A可能更容易。
标签: python arrays performance numpy