2011-03-28 78 views
1

我有這樣的數據:[...Matlab的:在一排從每一個其他減去每個值,每一行

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

在每一行中,我想從該行中的每一箇中單獨減去每個值。所以,我得到一個新的矩陣顯示了所有這樣的差異:[...


3 ... 6 ... 3
1 ... 6 ... 8。 .5 ... 7 ... 2
null

我希望你明白我的意思。我不想從任何東西中減去0(O對我來說是空的 - 如果你有一種方法可以用空值代替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 
+0

@jonas。再次是一個很好的答案。什麼是輸出矩陣的名稱? – Tom 2011-03-28 21:58:09

+0

@Tom:我稱它爲'out',因爲缺乏創造力。 – Jonas 2011-03-28 21:59:33

+0

@jonas。但在這種情況下,似乎我無法通過寫'out'或xlswrite('data.xls',out)一次顯示它們? – Tom 2011-03-28 22:03:37

相關問題