no time scores
1 10 123
2 11 22
3 12 22
4 50 55
5 60 22
6 70 66
. . .
. . .
n n n
Run Code Online (Sandbox Code Playgroud)
在我的txt文件的内容之上(数千行).
1st column - number of samples
2nd column - time (from beginning to end ->accumulated)
3rd column - scores
Run Code Online (Sandbox Code Playgroud)
我想创建一个新文件,该文件将是每三个分数样本的总和除以同一样本的时差.
e.g. (123+22+22)/ (12-10) = 167/2 = 83.5
(55+22+66)/(70-50) = 143/20 = 7.15
Run Code Online (Sandbox Code Playgroud)
新的txt文件
83.5
7.15
.
.
.
n
Run Code Online (Sandbox Code Playgroud)
到目前为止我有这个代码:
fid=fopen('data.txt')
data = textscan(fid,'%*d %d %d')
time = (data{1})
score= (data{2})
for sample=1:length(score)
..... // I'm stucked here ..
end
....
Run Code Online (Sandbox Code Playgroud)
如果你喜欢冒险,这里是一个使用ACCUMARRAY的矢量化单行解决方案(假设你已经data像其他人一样在矩阵变量中读取了文件):
NUM = 3;
result = accumarray(reshape(repmat(1:size(data,1)/NUM,NUM,1),[],1),data(:,3)) ...
./ (data(NUM:NUM:end,2)-data(1:NUM:end,2))
Run Code Online (Sandbox Code Playgroud)
请注意,此处样本数NUM=3是一个参数,可以用任何其他值代替.
另外,阅读上面的评论,如果样本数不是这个数字的倍数(3),那么只需事先这样做就丢弃剩余的样本:
data = data(1:fix(size(data,1)/NUM)*NUM,:);
Run Code Online (Sandbox Code Playgroud)
对不起,这是一个更简单的一个:P
result = sum(reshape(data(:,3), NUM, []))' ./ (data(NUM:NUM:end,2)-data(1:NUM:end,2));
Run Code Online (Sandbox Code Playgroud)