我有一個這樣的陣列:
1 2 3 4
2 3 4 5
3 4 5 6
我想拆分它并對子陣列求和以獲得更小的陣列。
例如,我想在給定以下組大小的情況下拆分它: [[2, 1], [1, 3]]
1 | 2 3 4
2 | 3 4 5
---------
3 | 4 5 6
結果應該是:
1 2 2 3 4 3 4 5
3 4 5 6
3 21
3 15
有沒有一種有效的方法可以使用 numpy 函式而不是 for 回圈來做到這一點?我需要在高維陣列上做。謝謝!
uj5u.com熱心網友回復:
假設你有一個更大的陣列:
arr = np.random.randint(10, size=(6, 8))
print(arr)
[[3 5 1 9 7 3 0 1]
[7 8 3 7 7 8 8 4]
[3 0 2 2 2 5 4 9]
[3 5 8 5 7 8 3 8]
[3 2 7 0 9 4 0 8]
[9 9 4 1 8 9 4 2]]
然后你可以在不同的軸上呼叫np.add.reduceat兩次:
def add_blocks(arr, s1, s2):
s1, s2 = [0] s1[:-1], [0] s2[:-1]
arr1 = np.add.reduceat(arr, np.cumsum(s1), axis=0)
arr2 = np.add.reduceat(arr1, np.cumsum(s2), axis=1)
return arr2
add_blocks(arr, [2, 3, 1], [1, 1, 1, 5])
array([[10, 13, 4, 54],
[ 9, 7, 17, 74],
[ 9, 9, 4, 24]], dtype=int32)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410495.html
標籤:
下一篇:提高分塊距離計算的計算速度
