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

如何生成首行首列固定为0,1,2的3x3矩阵并验证关联条件

问题解决:筛选满足特定条件的3x3矩阵

需求梳理

  • 生成所有元素取自{0,1,2}的3x3矩阵
  • 筛选首行和首列固定为[0,1,2]的矩阵
  • 验证并保留满足以下关联条件的矩阵:
    1. 对任意i,j,k ∈ {0,1,2},计算m = (i+j) mod 3,需满足a_ij = m且a_mk = (m+k) mod 3
    2. 计算n = (j+k) mod 3,需满足a_jk = n且a_in = (i+n) mod 3
    3. 最终要求a_mk = a_in

完善后的代码

from itertools import product
import numpy as np

# 生成所有元素为0、1、2的3x3矩阵,转换为整数类型
all_matrices = [np.array(list(i)).reshape(3, 3).astype(int) for i in product("012", repeat=9)]
print(f"总矩阵数量: {len(all_matrices)}")

# 筛选首行、首列固定为[0,1,2]的矩阵
filtered_matrices = []
for mat in all_matrices:
    if (mat[0] == [0,1,2]).all() and (mat[:,0] == [0,1,2]).all():
        filtered_matrices.append(mat)
print(f"首行首列符合要求的矩阵数量: {len(filtered_matrices)}")

# 验证关联条件,保留符合要求的矩阵
valid_matrices = []
for mat in filtered_matrices:
    is_valid = True
    # 遍历所有i,j,k的组合
    for i in range(3):
        for j in range(3):
            for k in range(3):
                # 验证i+j = a_ij(取模3适配元素范围)
                m = (i + j) % 3
                if mat[i][j] != m:
                    is_valid = False
                    break
                # 验证m+k = a_mk
                expected_mk = (m + k) % 3
                if mat[m][k] != expected_mk:
                    is_valid = False
                    break
                # 验证j+k = a_jk
                n = (j + k) % 3
                if mat[j][k] != n:
                    is_valid = False
                    break
                # 验证i+n = a_in
                expected_in = (i + n) % 3
                if mat[i][n] != expected_in:
                    is_valid = False
                    break
                # 验证a_mk == a_in
                if mat[m][k] != mat[i][n]:
                    is_valid = False
                    break
            if not is_valid:
                break
        if not is_valid:
            break
    if is_valid:
        valid_matrices.append(mat)

print(f"符合所有条件的矩阵数量: {len(valid_matrices)}")
# 输出所有符合条件的矩阵
print("符合条件的矩阵:")
for idx, mat in enumerate(valid_matrices):
    print(f"矩阵{idx+1}:")
    print(mat)
    print()

关键改进说明

  • 修正矩阵元素类型:将生成的字符串元素转为整数,避免类型不匹配的计算问题
  • 优化筛选逻辑:直接检查首行、首列是否完全匹配[0,1,2],避免原代码重复添加矩阵的错误
  • 补充完整验证逻辑:遍历所有i,j,k组合,严格按照需求逐一验证每个关联条件,同时通过取模3确保计算结果符合矩阵元素的取值范围

内容的提问来源于stack exchange,提问作者Prakash P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:22:14