2017-10-15 4 views
0

私は、各ページ/スライスが他のスライスとは独立した3Dマトリックスを持っています。したがって、私はfindコマンドを使用して各ページのデータをフィルタリングしたいと考えています。しかし、適用すると、findは、私のデータを全体として表す行ベクトルのインデックスを返します。実際にはそうではありません。例えば:私は適用することができるように、私は、(独立して)そうすることを意図し`find`を使って3D行列の各ページのインデックスを見つける方法は?

ind(:,:,1)= 
1 2 3 

ind(:,:,2)= 
1 5 6 10 %based on each slice, independent to other slices 

:私はのようなものを期待

ind= 
1 2 5 9 10 11 20 24 25 ... 

a=rand(1,10,5); 
ind=find(a<0.3); 

これは次のようind何かを返します見つかったインデックスは他のマトリックスの各スライスに割り当てられます。

ループを使用せずにこれを行うことはできますか?前もって感謝します!

+0

あなたの例と同じように、各3Dスライスには条件を満たすインデックスの数が異なる可能性が高いため、出力として3D配列を持つことはできません。 3D配列の各スライス内のエレメントの数は同じでなければなりません。そのためには、セル配列を使用する必要があります。 –

答えて

0

ind2sub()を使用してインデックスを添字に変換します。このようなものは、3Dアレイのために働くべきである:前記

[i,j,k] = ind2sub(size(a), ind) 

、出力(ijk)は、全て同じ大きさになり、それはind同じサイズです。換言すれば、a<0.3の値ごとに1組の添え字(i,j,k)(座標)を与える。

それはあなたが/あなたの質問に期待したいが、あなたはaでページごとに別々の添字をしたい場合、あなたは(例えばj(i==1),k(i==1)iの最初のページ用)、さらにフィルタリングする必要がありますどのような出力完全には明らかではありません。

+0

もっと説明できますか?私は「i j k」で何をしますか?または、それらから3Dマトリックスを形成する方法は? –

+0

質問を更新して再現可能なデータを使用すると( 'rand()'を使わないでください)、 'magic()'のようなものを試してみてください)、達成しようとしていることがより明確になります! – Justin

関連する問題