【问题标题】:Fastest way to add values of one numpy array to a 2D numpy array at particular index将一个 numpy 数组的值添加到特定索引处的 2D numpy 数组的最快方法
【发布时间】: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


【解决方案1】:

使用zip

for i, a in zip(indices, arrays):
    A[i, :len(a)] = a

输出:

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.]])

【讨论】:

  • 这种方法就是我所说的“遍历数组”。你认为这是最快的方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 2022-07-08
  • 2022-01-09
相关资源
最近更新 更多