bsxfun循环中的行减法



我有一个包含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
Mm2矩阵(数据来自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), : )

相关内容

  • 没有找到相关文章

最新更新