如何按矩阵分组标识对对应位置数值求和?附示例
嘿,我来帮你搞定这个需求!本质上咱们就是要根据第一行的标识,对第二行对应位置的数值做分组求和,下面给你两种常用工具的实现方法,按需选用就行:
解决方案
方法1:Matlab实现
你的矩阵格式看起来很贴合Matlab的写法,先给你对应代码:
A = [1 2 2 2 3 3 ; 0.1 0.2 0.3 0.05 0.2 0.8]; % 拆分标识行和数值行 labels = A(1,:); values = A(2,:); % 获取唯一标识并分组求和 unique_labels = unique(labels); result = zeros(size(unique_labels)); for i = 1:length(unique_labels) % 找出当前标识对应的所有位置 idx = labels == unique_labels(i); % 对对应位置的数值求和 result(i) = sum(values(idx)); end % 按要求格式输出结果 for i = 1:length(unique_labels) fprintf('标识%d对应的y(%d)=%.2f\n', unique_labels(i), unique_labels(i), result(i)); end
运行后会得到你想要的结果:
标识1对应的y(1)=0.10;标识2对应的y(2)=0.55;标识3对应的y(3)=1.00
方法2:Python实现
如果用Python处理,推荐用numpy或者pandas,两种方式都很方便:
用numpy实现
import numpy as np A = np.array([[1, 2, 2, 2, 3, 3], [0.1, 0.2, 0.3, 0.05, 0.2, 0.8]]) labels = A[0, :] values = A[1, :] # 获取唯一标识及对应索引,再加权求和 unique_labels, indices = np.unique(labels, return_inverse=True) result = np.bincount(indices, weights=values) # 输出结果 for label, res in zip(unique_labels, result): print(f'标识{label}对应的y({label})={res}')
用pandas实现(更直观)
import pandas as pd # 把数据转换成DataFrame,方便分组操作 df = pd.DataFrame({ 'label': [1, 2, 2, 2, 3, 3], 'value': [0.1, 0.2, 0.3, 0.05, 0.2, 0.8] }) # 按label分组求和 result = df.groupby('label')['value'].sum() # 按要求格式输出 for label in result.index: print(f'标识{label}对应的y({label})={result[label]}')
核心逻辑其实很简单:先拆分出分组标识和对应数值,再按标识分组,最后对每组的数值求和,就能得到每个标识对应的y值啦~
内容的提问来源于stack exchange,提问作者Wahdan Muath
相关产品推荐
相关产品推荐

