2014-01-14 72 views
0

我有一個代碼在Matlab中用2D數據左移和右移。有代碼通過matlab左右移動3D數據

function shift = shiftL(M) 
    shift = [ M(:,2:size(M,2)) M(:,size(M,2)) ]; 

function shift = shiftR(M) 
    shift = [ M(:,1) M(:,1:size(M,2)-1) ]; 

我想將上面的代碼應用於3D數據輸入。如何修改3D數據的上述代碼?謝謝

function shift = shiftL3D(M) 


function shift = shiftR3D(M) 

回答

1
function shift = shiftL3D(M) 
    shift = cat (3, M(:,:,2:size(M,3)) , M(:,:,1)); 
function shift = shiftR3D(M) 
    shift = cat (3,M(:,:,end), M(:,:,1:size(M,3)-1)) 
+0

謝謝michaeltang。如果我想在右移之後轉置矩陣。可能嗎?這是2D運輸移位=移位R(M')';.當我將它應用於3D時,錯誤是使用'ND陣列上的.Transpose未定義。如錯誤信息所示, – user3051460

+0

,ND陣列上的轉置沒​​有定義,這是不可能的。 – michaeltang

+0

由於3d矩陣有3個暗淡的因此它可以轉置爲6個不同的順序,排列可以做到這一點 – michaeltang

0
function shift = shiftL3D(M) 
    shift = cat(size(M,3),M(:,:,2:size(M,3)), M(:,:,1)); 

function shift = shiftR3D(M) 
    shift = cat(size(M,3),M(:,:,end),M(:,:1:size(M,3)-1)); 
+0

我嘗試運用你的代碼,但這種使用horzcat CAT參數尺寸不一致是錯誤錯誤。移位錯誤(行120) shift = [M(:,:,end)M(:,:,1:size(M,3)-1)]; – user3051460

+0

@ user3051460我的bad.please見我修訂版:) – ChuNan