給定兩個整數陣列a和b,其中 中的元素b表示a...
a = array([10,10,10,8,8,8])
b = array([0,2,3,5])
我想生成一個新陣列,其元素是 中a給出的索引范圍內元素的總和b,不包括范圍尾部的元素......很難用語言表達,但給出的預期結果a和b來自以上將是:
result = array([0, # sum(a[:0])
20, # sum(a[0:2])
10, # sum(a[2:3])
16]) # sum(a[3:5])
我怎么能以矢量化/“numpythonic”的方式實作這一點?
謝謝!
uj5u.com熱心網友回復:
我想你在看np.ufunc.reduceat:
np.add.reduceat(a,b)
出去:
# gotta handle the case `b[0] == 0` separately
array([20, 10, 16, 8])
uj5u.com熱心網友回復:
你可以試試這個:
import numpy as np
a = np.array([10,10,10,8,8,8])
b = np.array([0,2,3,5])
list(map(sum, np.split(a, b)))
它給:
[0, 20, 10, 16, 8]
最后一個數字是 slice 的總和a[5:]。
uj5u.com熱心網友回復:
這就是你要找的嗎?
import numpy as np
a = np.array([10,10,10,8,8,8])
b = np.array([0,2,3,5])
result = []
for i, v in enumerate(b):
result.append(sum(a[b[i-1]:v]))
result = np.array(result)
結果:
[ 0 20 10 16]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/341060.html
上一篇:從兩個NumPy陣列中隨機選取行
下一篇:根據多列值創建一個新列
