Matlab:Assemble 个子矩阵,其#cols 和#rows 存储在向量中
Matlab: Assemble submatrices whose #cols and #rows are stored in a vector
我有两个向量,R和C,它们分别具有我需要的子矩阵的行数和列数到一个矩阵 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)
我有两个向量,R和C,它们分别具有我需要的子矩阵的行数和列数到一个矩阵 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)