MATLAB中文本文件中几个元素的总和

时间:2014-02-14 08:11:00

标签: matlab

我有一个包含14000行和7列的文本文件。我必须采取这一列。然后我必须找到前40个元素的总和,然后是接下来的40个元素(41-80)然后是接下来的40个元素(81-120),依此类推。我为此编写了一个MATLAB代码。它是:

clc;clear all;close all; 
fid = fopen('sks.txt');
datacell = textscan(fid,'%f%f%f%*[^\n]',...
'delimiter','\t');
fclose(fid); 
A = datacell{1};
B=datacell{2};
l=size(A);
k=40;
sum=0;
for x=1:k
    sum=sum+A(x);
end;
sum
for y=1:((l/k)-1)
 sum1=0;
    for i=((y*k)+1):((y+1)*k)
      sum1=sum1+A(i);
    end; 
end;

我正在使用此代码获得所有的总和,但我希望所有答案都作为单个矩阵。目前所有答案都是单独获得的。有350个单独的答案。我希望所有350在一个矩阵中。我想要像

这样的东西
Sum=23
    34
    87
.......

等等。

 sum=23
sum=34
sum=87

我不擅长编码或MATLAB。所以如果除了这个之外还有一种更简单的方式,我非常欢迎你给我这个。或者请帮我修改这段代码。: - )

3 个答案:

答案 0 :(得分:0)

您可以以这种方式分配这些值(矩阵将随着每次迭代而扩展):

sum = [] % init output matrix
for y=1:((l/k)-1)
 sum1=0;
    for i=((y*k)+1):((y+1)*k)
      sum1=sum1+A(i);
    end; 
    sum = [sum; sum1]    % it will automatically expend matrix
end;

或者你知道Sum矩阵的最终输出(长度(1:((l / k)-1)))

sum = zeros(1,length(1:((l/k)-1))) % init output matrix
ii = 1; % matrix index
for y=1:((l/k)-1)
 sum1=0;
    for i=((y*k)+1):((y+1)*k)
      sum1=sum1+A(i);
    end; 
    sum(ii) = sum1   % assign value to matrix
    ii = ii + 1;     % increment matrix index
end;

答案 1 :(得分:0)

不是完整的答案 - 但会使代码更清晰,更快:

您可能遇到一些问题,因为sum实际上是内置函数的名称 - 意外完全与您在循环中执行的操作(只是更快)。

使用类似的东西:

mySum = sum(A)

mySum1 = mySum1 + sum( ((y*k)+1):((y+1)*k) )

答案 2 :(得分:0)

谢谢你的回答。我有一个更简单的方法。所以我想我会在这里分享。在matlab中有一个名为reshape的命令,所以我像这样使用它

A = datacell{1};
A1=squeeze( sum( reshape(A, 40, [], 1) ) );  

A1将给出每组40个元素的总和。