我有一个包含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。所以如果除了这个之外还有一种更简单的方式,我非常欢迎你给我这个。或者请帮我修改这段代码。: - )
答案 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个元素的总和。