2017-05-04 1 views
1

기존 행렬에서 행렬을 선택하여 sympy 행렬을 만들려고합니다 (교장 미성년자 계산 용).colums에서 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]]) 

을하지만 (이것은 시간이 걸리는 경우 나도 몰라 두 번 트랜스 위해 특히 필요.) 나에게 낭비 보인다 순간에 나는 이런 식으로하고 있어요. 더 좋은 방법이 있습니까? 만약 결정자 만 필요하면 더 좋은 방법이 있을까요?

답변

1

[2, 3, 0]을 색인으로 사용할 수 있습니다. 인덱스로 목록을 사용하여 지원하지 않습니다 낮은 버전의 경우

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

, 당신은 Matrix.hstack 사용할 수 있습니다

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

또는 Matrix.row_join을 :

>>> # 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