如何将for循环生成的40个3×7矩阵合并为120×7矩阵?
合并40个3×7矩阵为120×7矩阵的解决方案
嗨,我来帮你搞定这个矩阵合并的问题~你当前的循环代码里,每次生成的3×7矩阵A都会被下一次循环覆盖,根本没保存所有的矩阵,所以自然没法合并。这里有两种实用的方法来实现你的需求:
方法1:预分配内存(推荐,效率更高)
因为我们明确知道最终矩阵是120行(40×3)、7列,所以提前给结果矩阵分配好内存,再把每个循环生成的A放到对应的位置,这种方式在数据量较大时运行速度会快很多。
n = 40; % 预分配120×7的空矩阵,用zeros初始化是MATLAB里高效的预分配方式 combined_matrix = zeros(n*3, 7); for i = 1:n A = [ 1, 0, 0, ITRF(i,1), 0, ITRF(i,3), -ITRF(i,2); 0, 1, 0, ITRF(i,2), -ITRF(i,3), 0, ITRF(i,1); 0, 0, 1, ITRF(i,3), ITRF(i,2), -ITRF(i,1), 0 ]; % 计算当前A要插入的行区间 row_start = (i-1)*3 + 1; row_end = i*3; combined_matrix(row_start:row_end, :) = A; end
方法2:动态垂直拼接(简单直观,小数据场景适用)
如果你的数据量不大(比如这里的40个矩阵),直接每次把生成的A追加到结果矩阵底部就行,写法更简单,不用计算行位置。
n = 40; combined_matrix = []; % 初始化空矩阵 for i = 1:n A = [ 1, 0, 0, ITRF(i,1), 0, ITRF(i,3), -ITRF(i,2); 0, 1, 0, ITRF(i,2), -ITRF(i,3), 0, ITRF(i,1); 0, 0, 1, ITRF(i,3), ITRF(i,2), -ITRF(i,1), 0 ]; % 用分号实现垂直拼接,把A加到combined_matrix的底部 combined_matrix = [combined_matrix; A]; % 也可以用vertcat函数:combined_matrix = vertcat(combined_matrix, A); end
两种方法最终得到的combined_matrix就是你需要的120×7的矩阵啦。
内容的提问来源于stack exchange,提问作者Uladzislau
相关产品推荐
相关产品推荐

