在Matlab中从矢量生成三维矩阵



我在Matlab中有一个维度为(N-1)x1 的向量A

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

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

我想在不使用循环的情况下构建维度为Mx(N-1)x(N-1)的三维矩阵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, []);

我们使用CCD_ 11来生成CCD_ 12 2D矩阵,这些矩阵与CCD_ 13中的元素一样多,并且每个矩阵都乘以CCD_ 14中的相应值。下一步是取每个级联的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])

相关内容

  • 没有找到相关文章

最新更新