python - numpy 数组的每一行的特定列组的总和

标签 python numpy

我有以下 NumPy 数组:

>>> a = np.arange(21).reshape(3, 7)
>>> a
array([[ 0,  1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12, 13],
       [14, 15, 16, 17, 18, 19, 20]])
我想通过用它们的总和替换一些列来创建一个新数组。我需要总结的列将始终组合在一起。
例如,保持前两列不变。将索引为 2 的列替换为索引为 2、3 和 4 的列的总和。将索引为 3 的列替换为索引为 5 和 6 的列的总和。
所需输出:
array([[ 0,  1,  9, 11],
       [ 7,  8, 30, 25],
       [14, 15, 51, 39]])
我试过的:
b = np.concatenate([
    a[:, :2], 
    a[:, 2:5].sum(axis=1, keepdims=True), 
    a[:, 5:].sum(axis=1, keepdims=True)
], axis=1)
这提供了所需的输出,但我想知道是否有更好/简洁的方法来做到这一点。

最佳答案

定义要求和的区间的区间,然后使用 np.add.reduceat 沿axis=1 (对于每一行)-

In [37]: a
Out[37]: 
array([[ 0,  1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12, 13],
       [14, 15, 16, 17, 18, 19, 20]])

In [38]: bins = [0,1,2,5]

In [39]: np.add.reduceat(a,bins,axis=1)
Out[39]: 
array([[ 0,  1,  9, 11],
       [ 7,  8, 30, 25],
       [14, 15, 51, 39]])

关于python - numpy 数组的每一行的特定列组的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64118997/

相关文章:

python - 向 CouchDB 中的现有文档添加字段

Python - 读取 Powershell 脚本输出,使用子进程,希望逐行接收标准输出

python - Scikit Learn - ValueError : operands could not be broadcast together

python - 在两个 numpy 形状对象数组上应用成对形状函数

python - 循环遍历大型 .tif 堆栈(图像光栅)并提取位置

python - 二阶导数的三次样条表示

python - django 中的自定义用户模型不允许在管理员中设置密码

python - Python 3 相当于什么

python - BST 层序遍历

python - 格式化 numpy 浮点值