[英]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個維度的串聯。
一般來說:如果A
有N
的尺寸,但你用指數只是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.