2017-05-04 12 views
1

既存の行列から列を選択してsympy行列を作成しようとしています(主な未成年者を計算するため)。現時点では私はこのようにそれをやっている:列からsympy行列を作成する

>>> A = Matrix(3,5,[2,3,4,1,34,23,12,54,5,0,0,0,3,4,5]) 
>>> l = [A[:,i].T for i in [2,3,0]] 
>>> M = Matrix(l).T 
>>> M 
Matrix([ 
[ 4, 1, 2], 
[54, 5, 23], 
[ 3, 4, 0]]) 

しかし、これは(2回移調することが特に必要性、これは時間がかかる場合、私は知らない。)私には無駄なようです。より良い方法がありますか?行列式が必要な場合は、より良い方法がありますか?

答えて

1

[2, 3, 0]をインデックスとして使用できます。

>>> Matrix.hstack(*(A.col(i) for i in [2,3,0])) 
Matrix([ 
[ 4, 1, 2], 
[54, 5, 23], 
[ 3, 4, 0]]) 

またはMatrix.row_join:インデックスとしてリストを使用してサポートしていない、あなたがMatrix.hstackを使用することができます下のバージョンについては

>>> A = Matrix(3, 5, [2,3,4,1,34,23,12,54,5,0,0,0,3,4,5]) 
>>> A[:, [2,3,0]] 
Matrix([ 
[ 4, 1, 2], 
[54, 5, 23], 
[ 3, 4, 0]]) 

>>> # from functools import reduce # For Python 3.x 
>>> reduce(Matrix.row_join, (A.col(i) for i in [2,3,0]), Matrix(3,0,[])) 
Matrix([ 
[ 4, 1, 2], 
[54, 5, 23], 
[ 3, 4, 0]]) 
+0

これは私のために動作しません。 。私はIndexErrorを取得します:無効なインデックスa [[2、3、0]]。間違ったバージョン(0.7.4.1)がありますか?またはこれはnumpy行列でのみ可能ですか? – pyrogen

+0

@ pyrogen、私は 'sympy 1.0' – falsetru

+0

@ pyrogenを使用しました。私は、代替アプローチを含むように答えを更新しました。 (sympy 0.7.4.1でテスト済み) – falsetru

関連する問題