2011-08-07 39 views
2

假設您將得到一堆K-張量的創建(K + 1)-tensor,爲簡單起見,讓我們說,他們是2張量/矩陣:Matlab的:從K-張量清單

X = rand(5,5); Y = rand(5,5); 

是否有一種將它們組合成一個三維張量的習慣用法,其中第一維度對矩陣進行索引?做到這一點的方法之一是

P(1,:,:) = X; 
P(2,:,:) = Y; 

現在P具有尺寸2x5x5的要求。有一個更好的方法嗎? 例如,在一個numpy的可以簡單地鍵入:

P = array((X,Y)) 

但在MATLAB打字P=[X Y]P=[X; Y]會給10x55x10矩陣分別而非預期的2x5x5

回答

4

使用cat命令。

假設有5點矩陣大小(x,y,z)的,

A = rand(x,y,z); B = rand(x,y,z); C = rand(x,y,z); D = rand(x,y,z); E = rand(x,y,z); 

連接矩陣將是

M = cat(4, A, B, C, D, E); 

其中4指4個維度。輸出M的大小爲(x,y,z,5)。在MATLAB中,每個A,B,...的尺寸爲(x,y,z,1,1,...)矩陣,的即它們的4個維長度爲1。


級聯之後,它可能有必要改變二維索引的順序,使得第一維度是新創建的維度。使用permute命令。

N = permute(M, [4, 1, 2, 3]); 

輸出矩陣N具有大小(5,x,y,z)


編輯歷史

  1. 改變的輸入矩陣的大小從(3,3,3)(x,y,z)清楚地級聯和置換過程中區分每個維度。
  2. 增加了permute,這是滿足OP的尺寸指標要求所必需的。
1

在MATLAB一般情況下,電池陣列是Python列表等效(它們可以存儲不同類型的對象),所以你可以寫:

%# combine 
P = {X Y};  %# or: P = {X;Y}; 

%# access the elements 
P{1} 
P{2} 

在這種情況下(同樣大小的矩陣和類型),並如@rwong所示,沿着新維度連接可能是要走的路...