我知道this post,但我沒有看到答案。我想將數值代入sympy矩陣。更詳細地說,我確實在sympy中建立了一個系統,並且在某些情況下我想插入基於numpy數組的數值。我認爲這是可以使用字典。但是,我誤解了這個概念,或者這不是該語言的一個特徵。使用字典的Sympy矩陣替換
我有一個矩陣:
import sympy as sp
cp = sp.MatrixSymbol('cp',3,3)
C = sp.Matrix(cp)
sp.pprint(Q)
⎡cp₀₀ cp₀₁ cp₀₂⎤
⎢ ⎥
⎢cp₁₀ cp₁₁ cp₁₂⎥
⎢ ⎥
⎣cp₂₀ cp₂₁ cp₂₂⎦
我創建了一個字典
mydict={'cp', sp.Matrix(np.random.rand(3,3))}
但替代不起作用:
mydict = {'cp':sp.Matrix(cp)}
subs = C.subs(mydict)
sp.pprint(subs)
輸出(應該是數字):
如果我使用一個numpy的陣列,而不是sympy矩陣的我得到以下錯誤:
SympifyError: Sympify of expression 'could not parse u'[[ 0.69780014 0.89835127 0.9623417 ] [ 0.28375306 0.94416287 0.12325111] [ 0.20154648 0.7324886 0.87209933]]'' failed, because of exception being raised: SyntaxError: invalid syntax (<string>, line 1)
此嘗試給出了同樣的錯誤(代確切的變量名):
mydict2 = {}
i,j = C.shape
[ mydict2.update({C[i,j]: cp[i,j]})for i in range(i) for j in range(j)]
C.subs(mydict2)
任何線索?
編輯:作爲一個答案評論我後我的輸出應該是什麼樣子:
如果我生成一個隨機矩陣(我試過sp.Matrix,np.matrix和np.array):
sp.Matrix(np.random.rand(3,3))
⎡0.12 0.87 0.96⎤
⎢ ⎥
⎢0.31 0.71 0.44⎥
⎢ ⎥
⎣0.36 0.23 0.55⎦
和取代(如上圖所示)這個矩陣爲符號,我期望符號矩陣看起來像數字一樣。
你能澄清你到底想要什麼作爲輸出嗎?應該執行哪個替換?你想要塊矩陣嗎? –
不,我嘗試用基於numpy數組的數值替換 – Moritz
您可以添加您想要的輸出結果嗎? – miradulo