我有一个包含98行2列的文本文件D
。看起来像这样:
10 0.261344
11 0.456167
12 0.668595
2 0.481754
…etc
我有另一个excel文件M
,有17行2列。
我想从第一行减去所有行的值,然后从2减去,等等。所以我得到了这样的结果:
10-11-0.194823
10-12-0.407251
…etc
换句话说,第一行和所有休息、第二行和所有其他之间的差异。。不包括第1列具有与第2 M excel文件第1列中的值相同的值的那些行。这使得与81行相比总的差异。
我一直在尝试使用这个:
M = xlsread('...');
FSumID=fopen(D);
MatrixSub = loadD);
m = textscan(FSumID,'%d %f');
horzcat(m{:})
NewData = M(:,1)
D_size=size(D);
for i=1:D_size
if (ptvBodyDist(:,1)~=NewData(i))
%for calculating
DVec = bsxfun(@minus, ((m{i,2})), (m{i,2}));
%当我检查这个时,它只给一个循环全零(98,1),而我需要(((98-17)^2,1)。我需要更改表达式的最后一部分以获得我想要的内容,但我被bsxfun卡住了。我不知道如何做出正确的表达式来减去所有的行。
我是Matlab的新手,任何帮助都将不胜感激。如果你能建议一些手册或教程,除了mathworks的帮助。非常感谢。
通过2
矩阵(来自文本文件的数据)将D
设为n
设M
乘m
乘2
矩阵(数据来自excel文件)。
第一阶段是使用setdiff
查找D
的相关n-m
行:它们的第一个值没有出现在M
中的行。
[~, idx] = setdiff( D( :, 1 ), M( :, 1 ), 'stable' );
现在我们可以使用bsxfun
计算所有与所有差异
d = bsxfun( @minus, permute( D( idx, : ), [1 3 2] ), ...
permute( D( idx, : ), [3 1 2] ) );
现在d
是|idx
|x|idx
|x 2
阵列,其中
d( ii, jj, : ) = D( idx(ii), :) - D( idx(jj), : )