2011-04-19 83 views
12

我有一個3D數組在MATLAB中,與size(myArray) = [100 100 50]。現在,我想以2D矩陣的形式得到一個特定的圖層,該圖層由第一個維度中的索引指定。 我試過myMatrix = myArray(myIndex,:,:);,但是這給了我一個帶有size(myMatrix) = [1 100 50]的3D數組。如何獲得2D陣列的N維陣列的最後兩個維度?

如何告訴MATLAB我對第一維(因爲只有一個圖層)不感興趣,所以它可以簡化矩陣?

注意:我將需要使用第二個索引來執行此操作,而不是所需的[100 50]size(myMatrix) = [100 1 50]。解決方案應適用於這兩種情況,最好也適用於第三方面。

回答

14

使用squeeze函數可以刪除單例尺寸。

例子:

A=randn(4,50,100); 
B=squeeze(A(1,:,:)); 
size(B) 

ans = 

    50 100 

這是廣義的,你不用擔心哪個維度你一起索引。所有單身人士的尺寸被擠出。

2
reshape(myArray(myIndex,:,:),[100,50]) 
+0

太棒了! =)SO社區速度一如既往。 – 2011-04-19 17:14:09

0

squeeze,reshapepermute可能是處理N-D矩陣時最重要的三個函數。只是爲了舉例說明如何使用第三個功能:

A=randn(4,50,100); 
B=permute(A(1,:,:),[2,3,1])