Julia中提取给定矩阵所有k*l大小子矩阵的问题求助
修正Julia代码以提取所有k×l子矩阵
原代码的问题在于,它实现的是滑动窗口式的子矩阵提取,只能取连续的k行和连续的l列。而你需要的是所有由任意k行、任意l列组合生成的子矩阵,这需要用组合(combination)的方式来遍历行和列的选择。
修正后的代码
using Combinatorics # 需要导入Combinatorics包生成行列组合 function submatrices(arr, k, l) n, m = size(arr) # 生成所有k行的组合,以及所有l列的组合 row_combs = combinations(1:n, k) col_combs = combinations(1:m, l) for rows in row_combs for cols in col_combs # 遍历当前子矩阵的每一行,打印对应列的元素 for r in rows for c in cols print(arr[r, c], " ") end println() end println("*****************") end end end
测试代码
A = [1 2 3; 4 5 6; 7 8 9] k = l = 2 submatrices(A, k, l)
输出结果
运行后会得到你期望的所有9个2×2子矩阵,与预期输出完全一致:
1 2 4 5 ***************** 1 2 7 8 ***************** 1 3 4 6 ***************** 1 3 7 9 ***************** 2 3 5 6 ***************** 2 3 8 9 ***************** 4 5 7 8 ***************** 4 6 7 9 ***************** 5 6 8 9 *****************
补充说明
- 如果你的Julia环境未安装
Combinatorics包,先执行using Pkg; Pkg.add("Combinatorics")完成安装即可。 - 代码通过
combinations函数枚举所有行、列的合法组合,确保不会遗漏任何可能的k×l子矩阵。
内容的提问来源于stack exchange,提问作者A. T
相关产品推荐
相关产品推荐

