首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >减少numpy数组的大小,方法是将其拆分并在拆分之间进行求和。

减少numpy数组的大小,方法是将其拆分并在拆分之间进行求和。
EN

Stack Overflow用户
提问于 2022-01-11 17:44:46
回答 1查看 86关注 0票数 2

我有这样一个数组:

代码语言:javascript
运行
复制
1 2 3 4
2 3 4 5
3 4 5 6

我想把它分开,把子数组和起来,得到一个更小的数组。

例如,给定以下组大小,我希望将其拆分:[[2, 1], [1, 3]]

代码语言:javascript
运行
复制
1 | 2 3 4
2 | 3 4 5
---------
3 | 4 5 6

其结果应该是:

代码语言:javascript
运行
复制
1+2  2+3+4+3+4+5
3    4+5+6


3 21
3 15

是否有一种有效的方法来处理numpy函数而不是for循环?我需要在高维数组上这样做。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-11 20:02:26

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

代码语言:javascript
运行
复制
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两次:

代码语言:javascript
运行
复制
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)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70671192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档