You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中按索引的j值对对应numpy数组元素求和

按索引j值分组求和的Numpy实现

问题描述

我有两个列表Ii01和Iv01,其中Ii01包含一个存储索引的numpy数组,Iv01包含与这些索引对应的值(比如Iv01中的[2.1]对应Ii01中的[3,1])。需要对具有相同j值(即索引数组中每个元素的第二个数值)的索引对应的元素求和:例如j=3的索引[0,3]、[2,3]、[4,3]对应的Iv01值需求和;j=4的索引[0,4]、[2,4]对应的Iv01值也需求和。

示例代码:

import numpy as np
Ii01 = [np.array([[3, 1],
       [0, 2],
       [0, 3],
       [2, 3],
       [4, 3],
       [0, 4],
       [2, 4]])]

Iv01 = [np.array([[2.1],
       [3.4],
       [1.5],
       [9.7],
       [6.5],
       [4.2],
       [1.7]])]

预期输出:

[np.array([[2.1],
       [3.4],
       [17.7],  # 1.5+9.7+6.5
       [5.9]])]  # 4.2+1.7

解决方案

可以利用numpy的unique函数获取唯一j值,结合where和sum实现分组计算:

import numpy as np

Ii01 = [np.array([[3, 1],
       [0, 2],
       [0, 3],
       [2, 3],
       [4, 3],
       [0, 4],
       [2, 4]])]

Iv01 = [np.array([[2.1],
       [3.4],
       [1.5],
       [9.7],
       [6.5],
       [4.2],
       [1.7]])]

# 提取所有索引的j值(数组第二列)
j_values = Ii01[0][:, 1]
# 获取唯一j值及原索引对应关系
unique_j, indices = np.unique(j_values, return_inverse=True)

# 按j值分组求和并整理为列向量格式
summed_values = np.array([Iv01[0][indices == i].sum() for i in range(len(unique_j))]).reshape(-1, 1)

# 组装成目标列表结构
result = [summed_values]
print(result)

执行后输出结果:

[array([[ 2.1],
       [ 3.4],
       [17.7],
       [ 5.9]])]

代码说明

  • j_values = Ii01[0][:, 1]:从索引数组中提取所有j值(每个子数组的第二个元素)。
  • np.unique(j_values, return_inverse=True):获取去重后的j值,同时得到原数组每个j值在去重列表中的位置索引,用于后续分组。
  • 列表推导式遍历每个唯一j值,筛选对应分组的数值求和,最后用reshape(-1,1)保持和原数组一致的列向量结构。

内容的提问来源于stack exchange,提问作者user19657580

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:18:21