2015-06-25 76 views
0

3-d矩陣I具有矢量A在Matlab尺寸(N-1)x1生成從一個矢量在Matlab

A=[0:1:N-2]' 

N>=3,例如與N=4 A=[0 1 2]

我想構建維度Mx(N-1)x(N-1)的3維矩陣B而不使用循環,例如,與N=4M=5

B(:,:,1)=[0 0 0 0; 
      0 0 0 0; 
      0 0 0 0; 
      0 0 0 0; 
      0 0 0 0] 

B(:,:,2)=[1 1 1 1; 
      1 1 1 1; 
      1 1 1 1; 
      1 1 1 1; 
      1 1 1 1] 

...

B(:,:,end)=[N-2 N-2 N-2 N-2; 
      N-2 N-2 N-2 N-2; 
      N-2 N-2 N-2 N-2; 
      N-2 N-2 N-2 N-2; 
      N-2 N-2 N-2 N-2] 

回答

2

這是你想要的嗎?

B = repmat(reshape(A,1,1,[]), M, N-1); %// or change N-1 to N, according to your example 

另一種可能性:

B = bsxfun(@times, reshape(A,1,1,[]), ones(M, N-1)); %// or change N-1 to N 

另一個:

B = reshape(A(ceil((1:numel(A)*M*(N-1))/M/(N-1))), M, N-1, []); %// or change N-1 to N 
3

這裏有一個方法與kronreshape

A = 0:N-2; 
B = reshape(kron(A, ones(M, N-1)), M, N-1, []); 

我們使用kron生成M x (N-1)二維矩陣,堆疊的元素數量與A中的元素數量相同,每個矩陣乘以A中的相應值。下一步是採用每個連接的二維矩陣,並將它們作爲單獨的切片放置在第三維中,由reshape完成。

M = 5, N = 4

>> B 

B(:,:,1) = 

    0  0  0 
    0  0  0 
    0  0  0 
    0  0  0 
    0  0  0 


B(:,:,2) = 

    1  1  1 
    1  1  1 
    1  1  1 
    1  1  1 
    1  1  1 


B(:,:,3) = 

    2  2  2 
    2  2  2 
    2  2  2 
    2  2  2 
    2  2  2 
2

我打算使用permute,直到我得到了它的竅門,以保持示例...

B = ones(M,N-1,N-1).*permute(A,[3,2,1])