我有这样一个数组:
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循环?我需要在高维数组上这样做。谢谢!
发布于 2022-01-11 20:02:26
假设您有一个更大的数组:
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://stackoverflow.com/questions/70671192
复制相似问题