2017-03-06 10 views
2

SymPyのMatrixスライスの値を置き換えたいと思います。明示的に、私は奇数と偶数が交互SymPyのMatrixスライスの割り当て

A[0, 0::2] = [-1, -2] 
A[0, 1::2] = [1, 2] 

ような何かをしたいと思い、それは

import sympy as sym 
A = sym.Matrix(4, 4, range(16)) 
A[0, :] = [-1, -2, -3, -4] 

ようなものになるだろう。しかし、これはより興味深い例では、エラー

ShapeError: 
The Matrix `value` doesn't have the same dimensions as the in sub- 
Matrix given by `key`. 

を返します。列。

質問: SymPyでこれを行う方法はありますか?

答えて

1

SymPyマトリックスのスライシングは、NumPyアレイとは異なる働きをします。A[0, :]は1Dアレイではなく、マトリックスです。 documentationが言うように:割り当て、残念ながら

A[0, :] = [[-1, -2, -3, -4]]   # a matrix with 1 row 
A[:, 0] = [[-1], [-2], [-3], [-4]] # a matrix with 1 column 
A[:, 0] = sym.Matrix([3, 4, 5, 6]) # easier way to create a one-column matrix 

スライスは常に寸法がそう割り当てがそれに応じて行われなければならない1×1

であったとしても、見返りに行列を与えますA[0, 0::2]のような不連続な部分行列には(現在)実装されていません。メソッドcopyin_matrixは、割り当てられたブロックが連続しているとみなします。