1

私はこのようなデータを持っています:[..。

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

各行内で、その行の他のすべての値からすべての値を個別に減算したいと思います。そのため、次のようなすべての違いを示す新しいマトリックスを取得します。[..。

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

私の言いたいことがわかるといいのですが。私は何からも0を引きたくありません(私にとってOはnullです-0をnullに置き換える方法がある場合は問題ありません)。または、少なくとも、これを行う必要がある場合は、それらの結果を破棄する必要があります。ただし、行が完全に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 に答える