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 【问题描述】:我有两个向量,R 和 C,它们分别具有我需要在一个矩阵中组装的子矩阵的行数和列数 我(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存储在向量中的子矩阵的主要内容,如果未能解决你的问题,请参考以下文章
matlab图像如何用代码完成图像的分割、边缘检测和拼接的任务?