gpt4 book ai didi

python - 通过拆分它并在拆分之间求和来减少 numpy 数组的大小

转载 作者:行者123 更新时间:2023-12-02 18:22:36 25 4
gpt4 key购买 nike

我有一个这样的数组:

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 循环来做到这一点?我需要在高维数组上进行。谢谢!

最佳答案

假设你有一个更大的数组:

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)

关于python - 通过拆分它并在拆分之间求和来减少 numpy 数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70671192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com