簡體   English   中英

在Matlab中從向量生成3-d矩陣

[英]Generate a 3-d matrix from a vector in Matlab

我在Matlab中有一個向量A (N-1)x1

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]

這是使用kronreshape的一種方法:

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

我們使用kron產生M x (N-1)被堆疊為盡可能多的元件,因為有在二維矩陣A並且每個矩陣是通過在對應的值相乘A 下一步是獲取每個串聯的2D矩陣,並將它們作為單獨的切片放置在三維中,並通過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

這是你想要的嗎?

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

我將繼續使用permute直到掌握了...

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

暫無
暫無

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

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