matlab - 根据包含数字数据作为字符串的行索引对子矩阵求和

标签 matlab vectorization

如何对单元格子部分的每一列求和? 给定一个单元格 A

A = {'a'  '546.8'  '543.5'  '544'  
  'a'  '641.9'  '637.4'  '632.3'
  'a'  '214.7'  '214.1'  '231.8'
  'a'  '256.9'  '255.6'  '254.2'
  'c'  '356'    '355.1'  '354.4'
  'c'  '759'    '759.6'  '756.2'
  'c'  '352.2'  '350.4'  '350.8'
  'f'  '234'    '230.3'  '232.3'
  'f'  '225'    '223.5'  '221.8'}

根据A的第一列不同的字母将A分成子单元格,并对子单元格的各列求和。

预期的结果是:

B = {'a'  '1660.3'  '1650.6'  '1662.3'  
  'c'  '1467.2'    '1465.1'  '1461.4'
  'f'  '459'    '453.8'  '454.1'}

最佳答案

不需要循环:

%// get unique rows
[ids,~,subs] = unique(A(:,1))
%// transform string data to numeric data
vals = str2double(A(:,2:end))
%// sum unique rows
sums = accumarray(subs, 1:numel(subs), [], @(x) {sum(vals(x,:),1)} )
%// output result
out = [ids(:),num2cell(cell2mat(sums))]

关于matlab - 根据包含数字数据作为字符串的行索引对子矩阵求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39403289/

相关文章:

python - 填充 numpy 数组的向量方式

matlab - 如何识别 MATLAB 脚本中所有未定义的函数

image - 计算图像中圆心的坐标

matlab - 如何将多个元胞数组压缩在一起?

Java VS Matlab : Math. 随机()和随机数

matlab - 矩阵各行的排列

matlab - 如何反转灰度图像并将其转换为二值图像?

c - SSE操作可在2D数组上实现循环,其中每个输出取决于包含该数组的3x3正方形(生命游戏)

performance - 通过减少 for 循环数量来加速

matlab - 在MatLab中将矩阵的列与3d矩阵的2d矩阵切片相乘