1

我有这样的数据:[...

0...0...0...0
6...0...0...0
8...5...2...0
9...8...3.. .1
0...0...0...0

在每一行中,我想从该行中的每个值中分别减去每个值。这样我就得到了一个新矩阵,它显示了这样的所有差异:[...


0
3...6...3
1...6...8...5...7...2

我希望你明白我的意思。我不想从任何东西中减去 0(O 对我来说是 null - 如果你有办法用 null 替换 0 就可以了)。或者至少,如果必须这样做,我希望丢弃这些结果。但是当一行完全由 0 组成时,我确实希望有一些占位符。

结果减法的顺序无关紧要,除了应该保持整体的行顺序。

4

1 回答 1

2

您可以使用PDIST计算距离:

data =[0 0 0 0
6 0 0 0
8 5 2 0
9 8 3 1
0 0 0 0];
nRows = size(data,1);

%# for speed, preassign 'out'
out = cell(nRows,1);

for r = 1:nRows
   pts = data(r,data(r,:)>0); %# this assumes valid entries are >0
   switch length(pts),
   case 0,
      out{r} = []; %# empty for 'null'
   case 1, 
      out{r}=0; %# zero if only one valid number
   otherwise
      out{r}=pdist(pts'); %'# calculate all differences
   end
end

%# You access elements of a cell array with curly brackets
>> out{3}
ans =
     3     6     3
于 2011-03-28T21:49:28.097 回答