Matlab:组装其#cols和#rows存储在向量中的子矩阵

Posted

技术标签:

【中文标题】Matlab:组装其#cols和#rows存储在向量中的子矩阵【英文标题】:Matlab: Assemble submatrices whose #cols and #rows are stored in a vector 【发布时间】:2017-02-16 19:06:47 【问题描述】:

我有两个向量,RC,它们分别具有我需要在一个矩阵中组装的子矩阵的行数和列数 (40x20)。总共有 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。

问题:如何将矩阵 M 与所有子矩阵组合在一起?

有什么想法吗? 谢谢!

编辑

矩阵 M 应如下所示:

和子矩阵:

和k的值:

【问题讨论】:

R 和 C 大小不同。你的问题不是很清楚。你能提供输入和输出样本吗? 包含k(2) 的第二个矩阵的大小是多少,2 x 16? M 去哪儿了?您能否再展示一些子矩阵以明确M 的最终结构应该是什么?现在我看不到将R(长度为6)和C(长度为4)组合成12个子矩阵的方法。可能是 24 个子矩阵吗?另外,按什么顺序? 对不起,我编辑了问题,更新了k,并从Excel中粘贴了矩阵的图片。 我尝试阅读您的问题 3-4 次,但我更加困惑。 R和C是干什么用的?还有怎么submatrix M(1:4,1:4) has 4 rows, and 4 columns and value equal to k(1) = 1.我可以看到子矩阵有4行和列,但是你说k(1)=1的目的是什么@ 在我看来 R、C 和 k 应该有相同的大小?!? 【参考方案1】:

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

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)

【讨论】:

以上是关于Matlab:组装其#cols和#rows存储在向量中的子矩阵的主要内容,如果未能解决你的问题,请参考以下文章

DAY13 Matlab直角坐标系实现图像旋转

DAY13 Matlab实现图像镜像

matlab图像如何用代码完成图像的分割、边缘检测和拼接的任务?

Matlab绘制Griewank函数三维图像

在MATLAB中,如何找出矩阵的非零元素。并且输出它所在的行和列。只要非零就为真。输出1。。

matlab读取cvs文件的几种方法