2017-05-04 103 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