假设我有一个非正方形大小的矩阵,例如30X35,我想分割成4个块这样的块,它会像15X18一样,并用零填充所添加的单元格可以在matlab中完成?matlab中的阻塞矩阵
0
A
回答
0
您可以通过复制矩阵(两次),然后设置为0的部分做你想:
m = rand([30 35]);
mLeft = m;
mLeft(1:15, :) = 0;
mRight = m;
mRight(16:end, :) = 0;
或者它可能是周围的其他方式,你首先创建一个完整的0的矩阵然后复制您感兴趣的内容。
mLeft = zeros(size(m));
mLeft(16:end, :) = m(16:end, :);
泛化可以做的:
% find the splits, the position where blocks end
splits = round(linspace(1, numRows+1, numBlocks+1));
% and for each block
for s = 1:length(splits)-1
% create matrix with 0s the size of m
mAux = zeros(size(m));
% copy the content only in block you are interested on
mAux(splits(s):splits(s+1)-1, :) = m(splits(s):splits(s+1)-1, :)
% do whatever you want with mAux before it is overwriten on the next iteration
end
所以与30x35例子(numRows行= 30),并假设你要6块(numBlocks = 6),拆分为:
splits = [1 6 11 16 21 26 31]
这意味着第i个块开始于分裂(i)和在分割行第(i-1)-1 finsished。
然后,创建一个空的矩阵:
mAux = zeros(size(m));
和内容从米从塔复制分裂(ⅰ)到分割第(i + 1)-1:
mAux(splits(s):splits(s+1)-1, :) = m(splits(s):splits(s+1)-1, :)
如果您想要划分所有列的细分,则此示例为ilustrates。如果你想要行和列的子集,你将不得不在两个方向上找到拆分,然后做2个嵌套循环:
for si = 1:legth(splitsI)-1
for sj = 1:legth(splitsj)-1
mAux = zeros(size(m));
mAux(splitsI(si):splitsI(si+1)-1, splitsJ(sj):splitsJ(sj+1)-1) = ...
m(splitsI(si):splitsI(si+1)-1, splitsJ(sj):splitsJ(sj+1)-1);
end
end
0
你看过blockproc
?
+0
是的,但我无法得到它,因为好玩使用的处理,并希望去使用循环或类似的东西,因为块编号可能是不同的,把那个矩阵的矩阵大小 – Alyafey 2013-02-20 14:34:10
相关问题
- 1. Stata阻塞名为“P”的矩阵吗?
- 2. matlab中的矩阵
- 3. 矩阵矩阵在Matlab中的数组?
- 4. 矩阵在Matlab中
- 5. Matlab - 矩阵阵列
- 6. Matlab中的恒等矩阵
- 7. Matlab矩阵中的索引
- 8. MATLAB中的矩阵操作
- 9. matlab中的置换矩阵
- 10. MATLAB中的轮廓矩阵
- 11. Matlab中的旋转矩阵
- 12. Matlab中的矩阵方程
- 13. MatLab中矩阵的RREF
- 14. MatLab中的矩阵操作
- 15. Zeropad在matlab中的矩阵
- 16. MATLAB从矩阵
- 17. Matlab大矩阵
- 18. 在MATLAB矩阵
- 19. Matlab的:从矩阵
- 20. Matlab的变换2D矩阵3D矩阵
- 21. MATLAB帮助。堵塞在变量矩阵到现有的功能
- 22. 矩阵阻塞给出了分段错误
- 23. Matlab - 将矩阵乘以3D矩阵的每个矩阵
- 24. 在matlab中重塑矩阵
- 25. 在matlab中拼贴矩阵
- 26. 在matlab中递增矩阵
- 27. 在Matlab中绘制矩阵
- 28. 在matlab中更改矩阵
- 29. 在MATLAB中转换矩阵
- 30. 在MATLAB中排序矩阵
15x18分成30x35将近4次,而不是2次。 – 2013-02-20 16:11:25