我知道this post但我没有看到答案 . 我想将数值代入一个sympy矩阵 . 更详细地说,我确实 Build 了一个系统,在某些情况下我想插入基于numpy数组的数值 . 我认为可以使用词典 . 但要么我误解了这个概念,要么它不是该语言的一个特征 .
我有一个矩阵:
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)
输出(应为数字):
⎡cp₀₀ cp₀₁ cp₀₂⎤
⎢ ⎥
⎢cp₁₀ cp₁₁ cp₁₂⎥
⎢ ⎥
⎣cp₂₀ cp₂₁ cp₂₂⎦
如果我使用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⎦
和替代(如上所示)这个矩阵成为符号的,我期望符号矩阵看起来像数字矩阵 .
1 回答
虽然想要一个充满来自numpy的数字的同情矩阵的原因仍然让我无法理解,你可以像这样执行替换:
我正在使用
list
的额外调用,因为我正在使用Python3,其中zip
不会't return a list anymore, but a generator. Without it, in Python3, you'得到:刚添加完成 .