Matlab:每行减去一行中的每个值

时间:2011-03-28 21:25:33

标签: matlab subtraction

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

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替换0就好了)。或者至少,如果必须这样做,我希望丢弃这些结果。但是当一行完全由0组成时,我希望有一些占位符。

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

1 个答案:

答案 0 :(得分: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