簡體   English   中英

刪除矩陣的第三維

[英]Removing third dimension of matrix

假設我有矩陣使得A(:,:,1)=[1,2,3;2,3,4]A(:,:,2)=[3,4,5;4,5,6]

如何訪問和繪制向量(1,2,3),(2,3,4),(3,4,5),(4,5,6)是最簡單的方法。 我嘗試創建B=[A(:,:,1);A(:,:,2)] ,但我需要一個任意數量的A的過程。

希望這不是微不足道的,我已經讓自己滿意了。

你應該'垂直'思考。 這將允許您使用冒號索引:

>> A(:,:,1) = [1,2,3;2,3,4].'; %'// NOTE: transpose of your original
>> A(:,:,2) = [3,4,5;4,5,6].'; %'// NOTE: transpose of your original
>> A(:,:)
ans =
    1     2     3     4
    2     3     4     5
    3     4     5     6

使用兩個冒號的冒號索引適用於任何維度A

>> A(:,:,:,:,1,1) = [1 2 3; 2 3 4].';   %'
>> A(:,:,:,:,2,1) = [3 4 5; 4 5 6].';   %'
>> A(:,:,:,:,1,2) = [5 6 7; 6 7 8].';   %'
>> A(:,:,:,:,2,2) = [7 8 9; 8 9 0].';   %'
>> A(:,:)
ans =
     1     2     3     4     5     6     7     8
     2     3     4     5     6     7     8     9
     3     4     5     6     7     8     9     0

MATLAB中的冒號索引非常有趣,一旦掌握它就非常強大。 例如,如果使用的冒號少於數組中的維度(如上所述),MATLAB將自動連接沿着維度等於冒號計數的其余數據。

因此,如果A有48個維度,但您只用2個冒號進行索引:您將得到一個2D數組,即第二維的剩余46個維度的串聯。

一般來說:如果AN的尺寸,但你用指數只是M ≤ N冒號:你會得到一個M -D數組,即剩余的串聯NM沿維度M 第N維。

因此,只要您可以自由地定義A來包含而不是行的向量(您應該建議每個人都這樣做,因為幾乎所有MATLAB中的所有內容都快一點),我認為這是最快的最優雅的方式做你想要的。

如果沒有,那么,就像reshape丹:)

假設順序無關緊要,以下是如何為長度為3的向量執行此操作:

B = reshape(shiftdim(A,2), [], 3)
plot(B')

對於任意尺寸的矢量,按size(A,2)替換3 size(A,2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM