繁体   English   中英

使用稀疏索引和值更新 numpy 数组

[英]Update numpy array with sparse indices and values

我有一个一维的 numpy 数组,想存储它的稀疏更新。 假设我有一个长度为 500000 的数组,并且想要对 100 个元素进行 100 次更新。 更新要么是增加,要么只是改变值(我认为这并不重要)。

使用 numpy 的最佳方法是什么? 我只想存储两个数组:索引,values_to_add,因此有两个对象:一个存储稠密矩阵,另一个只保存要添加的索引和值,我可以用稠密矩阵做这样的事情:

dense_matrix[indices] += values_to_add

如果我有多个更新,我只会连接它们。

但是这种 numpy 语法不适用于重复元素:它们只是被忽略了。

当我们有一个重复索引的更新时更新对是 O(n)。 我想过用dict代替array来存储更新,从复杂性的角度来看,这看起来不错,但它看起来不是很好的numpy风格。

实现这一目标的最具表现力的方式是什么? 我知道 scipy 稀疏对象,但是 (1) 我想要纯 numpy 因为 (2) 我想了解实现它的最有效方法。

如果您有重复的索引,您可以使用at ,来自文档:

对由 'indices' 指定的元素对操作数 'a' 执行无缓冲就地操作。 对于加法 ufunc,此方法等价于 a[indices] += b,不同之处在于对索引不止一次的元素进行累加。

代码

a = np.arange(10)
indices = [0, 2, 2]
np.add.at(a, indices, [-44, -55, -55])
print(a)

输出

[ -44    1 -108    3    4    5    6    7    8    9]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM