0

我有一个D包含 98 行和 2 列的文本文件。看起来像这样:

10 0.261344
11 0.456167
12 0.668595
2 0.481754
...等

我有另一个M17 行和 2 列的 excel 文件。
我想从第一行中减去所有行的值,然后从 2 中减去,等等。所以我得到这样的结果:

10-11 -0.194823
10-12 -0.407251
...等

换句话说,第一行和所有其余部分之间的区别,第二行和所有其余部分之间的区别..不包括那些第一列与第二个 M excel 文件第一列具有相同值的行。与 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 帮助。非常感谢。

4

1 回答 1

1

让我们D通过矩阵(来自文本文件的数据)n。通过矩阵(来自excel文件的数据 )。2
Mm2

第一阶段是使用 : 查找其第一个值未出现在其中的相关n-m行。DMsetdiff

[~, idx] = setdiff( D( :, 1 ), M( :, 1 ), 'stable' );

现在我们可以使用计算 all-vs-all diffbsxfun

d = bsxfun( @minus, permute( D( idx, : ), [1 3 2] ), ...
                    permute( D( idx, : ), [3 1 2] ) );

现在d是| idx|x| idx|x2数组

d( ii, jj, : ) = D( idx(ii), :) - D( idx(jj), : )
于 2013-02-11T14:14:16.810 回答