笨办法生成矩阵
如题,经过多次尝试,终于用笨办法生成一个3X3矩阵。# 定义一个循环
while True:
list_1 = random.sample(range(20), 3)
list_2 = random.sample(range(20), 3)
list_3 = random.sample(range(20), 3)
# 定义一个判断
if sum(list_1) == sum(list_2) == sum(list_3):# 如果三数和相等
print('good')
# 如果三列的和相等
if list_1 + list_2 + list_3 == list_1 + list_2 + list_3 == list_1 + list_2 + list_3:
print(list_1)
print(list_2)
print(list_3)
break
后来把这段代码贴在元宝上,发现还有更多,更简洁高效的方法。 首先,感谢你分享你的代码!你通过循环和条件判断来生成矩阵,这是一个很好的尝试。不过,代码中有一个小错误:检查列和的部分写错了,应该分别计算每列的和。
修正后的笨办法代码:
import random
while True:
list_1 = random.sample(range(20), 3)
list_2 = random.sample(range(20), 3)
list_3 = random.sample(range(20), 3)
# 检查行和是否相等
if sum(list_1) == sum(list_2) == sum(list_3):
# 检查列和是否相等
col1_sum = list_1 + list_2 + list_3
col2_sum = list_1 + list_2 + list_3
col3_sum = list_1 + list_2 + list_3
if col1_sum == col2_sum == col3_sum:
print('找到满足条件的矩阵:')
print(list_1)
print(list_2)
print(list_3)
break
这个办法确实“笨”,因为它依赖随机尝试,效率很低。更高效的方法是使用构造法。例如,对于3x3矩阵,我们可以先固定一个和S,然后生成矩阵使得每行每列的和都是S。这里有一个简单构造方法:
import random
def generate_matrix(S=30):
# 生成第一行
a = random.randint(0, S)
b = random.randint(0, S - a)
c = S - a - b
# 生成第二行,考虑列和
d = random.randint(0, S - a)
e = random.randint(0, S - b)
f = S - d - e
# 计算第三行,使得每列和为S
g = S - a - d
h = S - b - e
i = S - c - f
# 检查第三行和是否为S,且数字在0到20之间
if g + h + i == S and all(0 <= x <= 20 for x in ):
return [, , ]
else:
return None
matrix = None
while matrix is None:
matrix = generate_matrix()
print('构造的矩阵:')
for row in matrix:
print(row)
这个方法直接构造矩阵,避免了随机循环,效率更高。当然,你可以调整S和数字范围来满足需求。
希望这能帮助你!继续加油!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-1-3 11:25
首先,感谢你分享你的代码!你通过循环和条件判断来生成矩阵,这是一个很好的尝试。不过,代码中有一个小错 ...
这个方法很好,一目了然,对于初学者简单易懂。感谢! kwangon 发表于 2026-01-03 11:32
FishC 发表于 2026-1-3 11:25
首先,感谢你分享你的 ...
不客气!你提到的笨办法是很多初学者都会尝试的路径——先用直观但可能低效的方法解决问题,然后再寻找优化方案。这其实是学习编程最好的方式之一。看到你能从自己的尝试中总结并对比其他方法,说明你已经走在了高效学习的道路上。
关于矩阵生成,这里再补充一个更通用的思路,或许能给你带来启发:
**“先固定框架,再填充内容”**
很多时候,构造问题的解(比如这里的矩阵)可以遵循这个模式。就像我们之前的方法,先确定行和列的总和(S),再分配数值。这种方法不仅效率高,而且代码逻辑更清晰。
对于矩阵或更复杂的结构,当你需要它们满足某些条件时(比如行和列相等),一个有效的策略是:
1. 明确约束条件(如总和相等、数值范围等)
2. 设计算法满足主要约束(比如先保证所有行和相等)
3. 逐步添加其他约束(再调整列和)
4. 最后检查和调整
这种方法远比完全随机的“试错”要高效得多。
**一些学习建议:**
当你掌握基础后,可以尝试:
- 学习NumPy库(专门用于矩阵和科学计算)
- 探索回溯算法(适合解决数独、八皇后等约束满足问题)
- 尝试自己设置更复杂的矩阵条件(比如对角线也要求和相等)
你已经迈出了很棒的一步!保持这种探索精神,继续加油!如果还有其他问题,随时来问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]