2017-10-15 41 views
0

我有一個3D矩陣,每個頁面/切片是獨立於其他切片。因此,我想使用find命令來過濾每個頁面中的數據。但是,應用時,find將返回一個行向量中的索引,它將整個數據描述爲我的數據,實際上它不是。例如:如何使用`find`查找3D矩陣的每個頁面的索引?

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

這將返回ind類似:

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

我希望是這樣的:

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

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

我打算這樣做(獨着),這樣我就可以申請找到其他矩陣的每個切片的索引。

這可以不使用循環嗎?提前致謝!

+0

由於很可能,就像您的示例一樣,每個3D切片中會有不同數量的索引滿足該條件,因此您無法將3D數組作爲輸出。 3D數組的每個切片中的元素數量必須相同。您將不得不爲此目的使用單元陣列。 –

回答

0

使用ind2sub()將您的索引轉換爲下標。這樣的事情應該用於3D陣列工作:

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

這就是說,輸出(ijk),將全部具有相同的尺寸,即尺寸爲ind相同。換句話說,它爲每個值a<0.3提供一組下標(i,j,k)(座標)。

這不是完全清楚你想要什麼輸出/從你的問題期望,但如果你想在a每一頁單獨標,你就必須進一步篩選(例如j(i==1),k(i==1)第一頁中i)。

+0

你能解釋更多嗎?我怎麼處理'i j k'?或者如何從這些形成3D矩陣? –

+0

如果你更新你的問題以使用可重現的數據(即不要使用'rand()',試試類似'magic()')的話,那麼它會更清楚你想要達到的效果! – Justin

相關問題