根据数组的值求和

根据数组的值求和,第1张

根据数组的值求和

我们可以使用

np.bincount
据称对这种累积加权计数非常有效的方法,所以这里有一个-

counts = np.bincount(i,v)d[:counts.size] = counts

或者,使用

minlength
输入参数,对于一般情况,当
d
可以是任何数组,而我们想添加到该数组中时,

d += np.bincount(i,v,minlength=d.size).astype(d.dtype, copy=False)

运行时测试

本节将本文中

np.add.at
列出的基础方法
otherpost
与本文
np.bincount
前面列出的基础方法进行比较。

In [61]: def bincount_based(d,i,v):    ...:     counts = np.bincount(i,v)    ...:     d[:counts.size] = counts    ...:     ...: def add_at_based(d,i,v):    ...:     np.add.at(d, i, v)    ...:In [62]: # Inputs (random numbers)    ...: N = 10000    ...: i = np.random.randint(0,1000,(N))    ...: v = np.random.randint(0,1000,(N))    ...:     ...: # Setup output arrays for two approaches    ...: M = 12000    ...: d1 = np.zeros(M)    ...: d2 = np.zeros(M)    ...:In [63]: bincount_based(d1,i,v) # Run approaches    ...: add_at_based(d2,i,v)    ...:In [64]: np.allclose(d1,d2)  # Verify outputsOut[64]: TrueIn [67]: # Setup output arrays for two approaches again for timing    ...: M = 12000    ...: d1 = np.zeros(M)    ...: d2 = np.zeros(M)    ...:In [68]: %timeit add_at_based(d2,i,v)1000 loops, best of 3: 1.83 ms per loopIn [69]: %timeit bincount_based(d1,i,v)10000 loops, best of 3: 52.7 µs per loop


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4989942.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-14
下一篇2022-11-14

发表评论

登录后才能评论

评论列表(0条)

    保存