【问题标题】:How to make atomic add with numpy如何使用 numpy 进行原子添加
【发布时间】:2019-07-31 21:08:40
【问题描述】:

我正在寻找一种在numpy 中使用一个运算符而不是 Python 循环来进行原子或非向量加法或其他操作的方法

假设我有以下numpy 数组:

import numpy as np 


arr = np.zeros(4)

ids = np.array([1,2,1])

adds = np.array([1,2,3,4])

arr[ids] +=adds[ids]
'''
for  x in ids:
    arr[x] +=adds[x]
 '''   

print(arr )

如何实现推荐出来的代码?此添加的结果不正确,就像我只添加一次 arr[1] 位置。 是否有numpy 函数可以正确执行此操作?

好的,是否也可以这样做:

ids = np.array([0,1,2,1])

adds = np.array([1,2,3,4])

for  i, x in enumerate(ids):
    arr[x] +=adds[i]

只有一个 numpy 操作?这是主要问题。

【问题讨论】:

  • 查看np.add.at - 它是+= 的无缓冲版本。
  • 好的,谢谢,我正在寻找

标签: python arrays numpy


【解决方案1】:

您可以使用np.unique 来返回唯一索引以及索引计数。然后您可以使用计数与 r.h.s. 相乘。添加操作:

i, n = np.unique(ids, return_counts=True)
arr[i] += n*adds[i]

【讨论】:

  • 等等对不起我不想要那个(见修改后的问题)ids = np.array([0,1,2,1]) 添加 = np.array([1,2,3,4] ) for i, x in enumerate(ids): arr[x] +=adds[i]
猜你喜欢
  • 2011-05-01
  • 2015-08-28
  • 2014-08-16
  • 2018-02-28
  • 2016-02-28
  • 2011-05-09
  • 2021-10-22
  • 2017-08-22
  • 2021-03-14
相关资源
最近更新 更多