我有一个包含98行和2列的文本文件D
。看起来像这样:
10 0.261344
11 0.456167
12 0.668595
2 0.481754
......等等。
我有另一个excel文件M
,有17行和2列
我想从第1行中减去所有行值,然后从2中减去,等等。我得到这样的结果:
10-11 -0.194823
10-12 -0.407251
......等等。
换句话说,第1行和所有其余部分,第2行和所有其余部分之间的差异...包括第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帮助。非常感谢。
答案 0 :(得分:1)
让D
n
为2
矩阵(来自文本文件的数据)。
M
m
2
个n-m
矩阵(excel文件中的数据)。{/ p>
第一阶段是使用setdiff
找到D
行的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
是| idx
| x | 2
| x d( ii, jj, : ) = D( idx(ii), :) - D( idx(jj), : )
数组
{{1}}