2016-07-23 80 views
1

儘管我的問題似乎與sympy github問題here相關,但它似乎沒有直接關係,或者仍然是一個未解決的問題(從2012年開始)。sympy矩陣內的sympy矩陣仍未評估代換

我的問題是我在我的矩陣表示的矩陣中有一個'矩陣'(實際上,它只是一個矢量,但是我唯一的選擇,因爲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]])}) 

中的每個值的matrix [[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)]]) 

我似乎沒有能夠找到一種方法來評估所有的Matrix對象,它們的指標 - 遠程相關的是GitHub的問題上面鏈接的唯一的事情,但使用xreplace是我的意圖甚至不太理想/正確,因爲它留下的符號就位,而不是取代矩陣英寸

任何幫助非常感謝。

+0

這是一個更相關的問題https://github.com/sympy/sympy/issues/2962 – asmeurer

回答

1

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]]) 
+0

感謝@asmeurer。我很快就遇到了這個問題,忘記回來發佈答案。 – mediantis