作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个这样的数组:
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/
我是一名优秀的程序员,十分优秀!