如何为三维数组x(21,1,50)适配原有迭代生成多维数组的MATLAB代码
方案1:嵌套循环实现(和原有逻辑完全对齐,易读性强)
你原有逻辑是对单组长度为21的x计算滑动窗口外积的均值,现在新增的第三维对应50组独立的输入,只需要在外层加一层j的循环,输出结果扩为3维即可:
n = 11; m = 11; j_num = 50; % 初始化输出:最后一维对应j=1~50的计算结果 Rz = zeros(m, m, j_num); for j = 1:j_num % 取出当前j对应的单组x,尺寸和你最初的输入一致为(21,1) x_curr = x(:, :, j); R = zeros(m, m, n); for i = 1:n z = x_curr(i:i+m-1); R(:,:,i) = z * z'; end Rz(:,:,j) = sum(R, 3) / n; end
方案2:向量化优化实现(减少循环层数,运行效率更高)
如果需要提升运行速度,可以用hankel函数直接生成滑动窗口矩阵,省略内层的i循环:
n = 11; m = 11; j_num = 50; Rz = zeros(m, m, j_num); for j = 1:j_num % 生成滑动窗口矩阵,每列对应一个长度为11的窗口 window_mat = hankel(x(1:11, :, j), x(11:21, :, j)); % 批量计算所有窗口的外积和再取平均 Rz(:,:,j) = (window_mat * window_mat') / n; end
两种方案最终输出的Rz均为11×11×50的数组,Rz(:,:,j)就对应第j组输入的计算结果,和你原有单组场景的输出格式完全匹配。
内容的提问来源于stack exchange,提问作者faty
相关产品推荐
相关产品推荐

