Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 根据包含数字数据作为字符串的行索引对子矩阵求和_Matlab_Vectorization - Fatal编程技术网

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

Matlab 根据包含数字数据作为字符串的行索引对子矩阵求和,matlab,vectorization,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'

如何对单元格子部分的每列求和 给定一个单元格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'}

可能的解决办法之一是

[B,~,idxs]= unique(A(:,1))
for k=2:size(A,2)
    B(:,k)= num2cell(accumarray(idxs,str2double(A(:,k))))
end

不需要循环:

%// 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))]

为什么要将数字保留为字符串?单元格数组可以包含混合数据类型。我保持它与从excel导入的数据类型相同。