Python 同余矩阵中的同余矩阵在替换时保持未赋值

Python 同余矩阵中的同余矩阵在替换时保持未赋值,python,matrix,lazy-evaluation,sympy,substitution,Python,Matrix,Lazy Evaluation,Sympy,Substitution,虽然我的问题似乎与sympy github问题有关,但它要么似乎没有直接关系,要么仍然是一个开放的、未解决的问题(从2012年开始) 我的问题是,在我的矩阵中有一个“矩阵”(实际上,它只是一个向量,但由于sympy处理事物的方式,它是我唯一的选择),由一个符号表示,当被替换时,它显示一个矩阵,而不是计算它 下面是一个示例代码块,将演示这一点: import numpy as np import sympy x = np.random.rand(15, 3) l_syms = sympy.Matr

虽然我的问题似乎与sympy github问题有关,但它要么似乎没有直接关系,要么仍然是一个开放的、未解决的问题(从2012年开始)

我的问题是,在我的矩阵中有一个“矩阵”(实际上,它只是一个向量,但由于sympy处理事物的方式,它是我唯一的选择),由一个符号表示,当被替换时,它显示一个矩阵,而不是计算它

下面是一个示例代码块,将演示这一点:

import numpy as np
import sympy
x = np.random.rand(15, 3)
l_syms = sympy.MatrixSymbol('l', 1, 3)
m = sympy.Matrix(x/l_syms)
m.subs({l_syms:sympy.Matrix([[1,1,1]])})
矩阵
[[1,1,1]]中的每个值应划分为
m
矩阵的每个元素,但矩阵按原样放置,索引符号保留

Matrix([
[  0.98979011265311*Matrix([[1, 1, 1]])[0, 0]**(-1),  0.833576329284127*Matrix([[1, 1, 1]])[0, 1]**(-1),  0.575808048824554*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[ 0.523263044342704*Matrix([[1, 1, 1]])[0, 0]**(-1),  0.320197709246721*Matrix([[1, 1, 1]])[0, 1]**(-1),  0.592365354846089*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[ 0.943288501064919*Matrix([[1, 1, 1]])[0, 0]**(-1),  0.996020450969247*Matrix([[1, 1, 1]])[0, 1]**(-1),  0.964522394691641*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[ 0.763752929521655*Matrix([[1, 1, 1]])[0, 0]**(-1),  0.690054409108757*Matrix([[1, 1, 1]])[0, 1]**(-1),  0.417629855595703*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[ 0.213578356927868*Matrix([[1, 1, 1]])[0, 0]**(-1),  0.362782611339912*Matrix([[1, 1, 1]])[0, 1]**(-1),  0.892921288169683*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[ 0.068921237699985*Matrix([[1, 1, 1]])[0, 0]**(-1),  0.244310349677818*Matrix([[1, 1, 1]])[0, 1]**(-1),  0.977494896836049*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[0.0169721915631557*Matrix([[1, 1, 1]])[0, 0]**(-1),  0.254316922886399*Matrix([[1, 1, 1]])[0, 1]**(-1),  0.682785271511585*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[ 0.768287921847173*Matrix([[1, 1, 1]])[0, 0]**(-1),  0.679243253034139*Matrix([[1, 1, 1]])[0, 1]**(-1),  0.790710466097621*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[ 0.892115183428169*Matrix([[1, 1, 1]])[0, 0]**(-1),  0.988514816033581*Matrix([[1, 1, 1]])[0, 1]**(-1),  0.537769900907173*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[ 0.275725750770885*Matrix([[1, 1, 1]])[0, 0]**(-1),  0.928279364723852*Matrix([[1, 1, 1]])[0, 1]**(-1),   0.18023576064915*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[  0.71421202332017*Matrix([[1, 1, 1]])[0, 0]**(-1),  0.663585719630706*Matrix([[1, 1, 1]])[0, 1]**(-1),   0.43460735199406*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[ 0.770814091341355*Matrix([[1, 1, 1]])[0, 0]**(-1), 0.0650430822905173*Matrix([[1, 1, 1]])[0, 1]**(-1), 0.0845773234523002*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[0.0398441324212175*Matrix([[1, 1, 1]])[0, 0]**(-1), 0.0358479090409692*Matrix([[1, 1, 1]])[0, 1]**(-1), 0.0801076763216808*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[  0.89937521111821*Matrix([[1, 1, 1]])[0, 0]**(-1),   0.21500916688666*Matrix([[1, 1, 1]])[0, 1]**(-1),  0.661216039738327*Matrix([[1, 1, 1]])[0, 2]**(-1)],
[ 0.866641224226343*Matrix([[1, 1, 1]])[0, 0]**(-1), 0.0506005171711028*Matrix([[1, 1, 1]])[0, 1]**(-1),  0.791277139679317*Matrix([[1, 1, 1]])[0, 2]**(-1)]])
我似乎找不到一种方法来评估所有这些矩阵对象及其索引-唯一与之无关的是上面链接的github问题,但使用
xreplace
对我的意图更不理想/正确,因为它将符号保留在适当的位置,而不是替换矩阵


非常感谢您的帮助。

doit
将对表达式进行求值

In [9]: print(m.subs({l_syms:sympy.Matrix([[1,1,1]])}).doit())
Matrix([[0.391482321650262, 0.261165517803277, 0.142349217414644], [0.273871679444907, 0.753721446526393, 0.915204734923647], [0.689284430582533, 0.509755263016457, 0.828178833602631], [0.258602302969241, 0.561852165820955, 0.926528186168350], [0.932268817842373, 0.275670112515102, 0.313790471533159], [0.815965494794080, 0.00638263457666399, 0.728986133320254], [0.771288596688822, 0.159602759327409, 0.846541783656596], [0.703501924167250, 0.168463436323684, 0.496465192945264], [0.265617558320534, 0.727288058464723, 0.301561940789455], [0.134747729067062, 0.315683443879649, 0.741893699540517], [0.763480667163729, 0.459612818589501, 0.295897102504639], [0.519647253027057, 0.884505816757734, 0.823849322619653], [0.0499379745242409, 0.333299403033741, 0.960531610086280], [0.658552664971765, 0.788381947436270, 0.609862319604282], [0.748840147759344, 0.434013189476355, 0.747584770109250]])

这是一个更相关的问题,谢谢@asmeurer。不久之后,我遇到了这个问题,忘了回来发布答案。