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

不使用Numpy在Python中创建单位矩阵的问题求助

问题分析与解决方法

你的核心问题在于Python中列表是引用类型,你创建矩阵时多次将同一个列表b添加到Q中,导致Q里的每一行其实都是指向同一个列表对象的引用——修改任意一行的元素,所有行都会跟着变化。

原代码错误原因

比如你最初的代码:

Q = []
b = []
row = 2
col = 2

for i in range(row):
    b.append(0)
for j in range(row):
    Q.append(b)  # 这里添加的都是同一个b的引用

此时Q的两个元素都指向b,当你执行Q[n][n] = 1时,本质是在修改b的元素,最终所有行都会同步变化,才会出现[[1,1],[1,1]]的结果。

正确实现方式

方法1:循环创建独立行列表

每次循环都生成一个新的全零列表,避免引用同一对象:

row = 2
col = 2
Q = []

# 先创建全零矩阵
for i in range(row):
    new_row = [0] * col  # 每次生成新列表
    Q.append(new_row)

# 设置对角元素为1
for n in range(min(row, col)):
    Q[n][n] = 1

方法2:嵌套循环直接构建

在构建每一行时直接判断是否为对角元素:

row = 2
col = 2
Q = []

for m in range(row):
    current_row = []
    for n in range(col):
        current_row.append(1 if m == n else 0)
    Q.append(current_row)

方法3:列表推导式(简洁写法)

用Python特有的列表推导式一行完成:

row = 2
col = 2
Q = [[1 if i == j else 0 for j in range(col)] for i in range(row)]

以上三种方法都能正确生成单位矩阵,你可以根据作业要求选择合适的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:01:20