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

如何使用NumPy求解将矩阵a转换为矩阵b的置换矩阵?

解决方法

你之前用np.linalg.solve(a, b)出错的原因是,这个函数求解的是满足a @ x = b的矩阵x,但你需要的置换矩阵P满足的是P @ a = b(即对a做行置换得到b),两者的线性关系完全不同。

正确的做法是直接匹配b的每一行在a中的位置,构造置换矩阵:

import numpy as np

a = np.array([[1,4,7,-2],[3,0,-2,-1],[-4,2,1,0],[-8,-3,-1,2]])
b = np.array([[-4,2,1,0],[3,0,-2,-1],[-8,-3,-1,2],[1,4,7,-2]])

perm_matrix = np.zeros((a.shape[0], a.shape[0]), dtype=int)

for i in range(b.shape[0]):
    # 找到b第i行在a中的行索引
    row_idx = np.where(np.all(a == b[i], axis=1))[0][0]
    perm_matrix[i, row_idx] = 1

print(perm_matrix)

运行后会输出你需要的正确置换矩阵:

[[0 0 1 0]
 [0 1 0 0]
 [0 0 0 1]
 [1 0 0 0]]

验证正确性

可以通过矩阵乘法验证结果:

print(np.allclose(perm_matrix @ a, b))  # 输出True,说明P@a确实等于b

补充说明

如果矩阵元素存在浮点精度误差,建议将np.all(a == b[i], axis=1)替换为np.allclose(a, b[i], axis=1),避免因微小数值差异导致匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:01:02