Matlab中for循环合并数组问题:将多个2x1数组合并为20x1数组
解决Matlab中合并2x1数组成20x1数组的问题
原代码的问题在于:你把每个2x1的w赋值给了W的第i行(W(i,:) = w;),最终得到的是10行2列的矩阵,和你需要的20行1列数组不符。要实现所有小数组的垂直堆叠,可按以下两种方式修改:
方法1:动态垂直拼接
直接在循环里把每个w垂直追加到W末尾,修改循环内的赋值语句即可:
clc clear all u_x = 10; u_y = 20; u = [u_x; u_y]; W = []; for i=1:10 w = u.*i + rand(2,1); W = [W; w]; % 垂直拼接,每次把w加到W底部 end W
方法2:预分配内存(更高效)
Matlab中动态扩容会降低运行效率,尤其是数据量较大时。可以先预分配20x1的数组空间,再把每个w放到对应位置:
clc clear all u_x = 10; u_y = 20; u = [u_x; u_y]; W = zeros(20,1); % 预分配20行1列的数组 for i=1:10 w = u.*i + rand(2,1); W(2*i-1:2*i) = w; % 把w放到第2i-1到2i行的位置 end W
两种方法最终都会得到20x1的数组,其中方法2在循环次数较多时性能更优。
内容的提问来源于stack exchange,提问作者Konstantinos Arvanitis
相关产品推荐
相关产品推荐

