在Julia中如何控制for循环按指定次数迭代,实现矩阵行滑动窗口取值
实现方案
因为你给出的矩阵写法是MATLAB风格,先提供MATLAB实现,同时也附Python版本参考。
MATLAB实现
核心逻辑是控制列索引的遍历上限,保证每一次取数都能覆盖当前元素+后续2个元素,不会越界:
a = [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15;]; [row_cnt, col_cnt] = size(a); % 用cell数组存储结果,每行对应原矩阵的一行,每个元素是要求的子数组 res = cell(row_cnt, col_cnt - 2); for row_idx = 1:row_cnt % 列索引最多到倒数第3位,保证j+2不超过列数 for col_idx = 1:col_cnt - 2 res{row_idx, col_idx} = a(row_idx, col_idx:col_idx+2); end end % 测试输出第一行结果 disp(res(1,:))
运行后第一行输出为 [1 2 3] [2 3 4] [3 4 5],符合需求。
Python实现
如果用Python处理,逻辑完全一致,用切片取数更简洁:
a = [ [1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15] ] res = [] for row in a: row_res = [] # 索引最多到倒数第3位 for i in range(len(row) - 2): # 切片左闭右开,i到i+3刚好取3个元素 row_res.append(row[i:i+3]) res.append(row_res) # 测试输出第一行结果 print(res[0])
运行后第一行输出为 [[1, 2, 3], [2, 3, 4], [3, 4, 5]]。
边界说明
原矩阵每行只有5个元素,因此每行只有前3个元素可以凑齐「自身+后续2个元素」的要求,最后2个元素因后续元素不足默认跳过。如果你需要对最后2个元素也做处理(比如不足位补默认值、或者直接返回剩余元素),可以把遍历的列索引上限调整为总列数,切片会自动截断不足的部分。
内容的提问来源于stack exchange,提问作者Jessica V
相关产品推荐
相关产品推荐

