Matlab:Assemble 个子矩阵,其#cols 和#rows 存储在向量中

Matlab: Assemble submatrices whose #cols and #rows are stored in a vector

我有两个向量,RC,它们分别具有我需要的子矩阵的行数和列数到一个矩阵 I (40x20) 中的 assemble。总共有12个子矩阵。

R = [4     2     4     4     2     4];
C = [4    16    16     4];

此外,每个子矩阵的所有元素都将其值存储在向量中 k:

k = [3 2 3 3 2 3 2 1 2 2 1 2 2 1 2 2 1 2 3 2 3 3 2 3 ]; % 24 elements

因此,例如,子矩阵 M(1:4,1:4) 有 4 行和 4 列,值等于 k(1) = 1。

问题:如何 assemble 矩阵 M 与所有子矩阵?

有什么想法吗? 谢谢!

编辑:

矩阵 M 应如下所示:

和子矩阵:

和 k 的值:

这是一个向量化的解决方案:

R1 = repelem(1:numel(R), R);
C1 = repelem(1:numel(C), C);
[CC RR] = meshgrid(C1, R1);
idx = sub2ind([numel(R), numel(C)], RR, CC);
result = k(idx);

相反,您可以使用元胞数组,用子矩阵填充它,然后将元胞数组转换为矩阵。

carr = cell(numel(R), numel(C));
k1 = reshape(k,numel(R),numel(C));
for ii = 1:numel(R)
    for jj = 1:numel(C)
        carr(ii,jj)=repmat(K1(ii,jj), R(ii), C(jj));
    end
end
result = cell2mat(carr)