[英]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=4
, M=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]
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.