我有这样的数据:[...
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组成时,我希望有一些占位符。
结果减法的排序无关紧要,除了应保持整个行顺序。
答案 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