You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:17:20