循环中的bsxfun行减法

时间:2013-02-11 12:24:05

标签: matlab row subtraction bsxfun

我有一个包含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帮助。非常感谢。

1 个答案:

答案 0 :(得分:1)

D n2矩阵(来自文本文件的数据)。
M m 2n-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}}