2017-04-18 106 views
0

我是python中的初学者。我有这个矩阵:python中包含cos和sin的矩阵

Mat RX = (Mat_<double>(4, 4) << 
      1, 0,   0,   0, 
      0, cos(roll), -sin(roll), 0, 
      0, sin(roll), cos(roll), 0, 
      0, 0,   0,   1); 

我该如何在Python中做到这一点?它提供了错误,当我尝试这样:

MatrixX = np.mat('1,2,3;cos(roll),6,7') 
+1

你还没说是什么角色呢? – Elan

回答

2

请勿使用np.mat的字符串构造函数。它主要用于缓解matlab用户,并且只适用于最简单的情况。它还会创建一个np.matrix,通常不推荐使用它。

所有你需要的这里是:

np.array([ 
    [1, 2, 3], 
    [4, 5, np.cos(roll)] 
]) 

(换行可选)

+0

非常感谢:) –

0

如果您解读为此cos(),然后构造中的字符串,可以工作:

代码:

MatrixX = np.mat('1,2,3;%s,6,7' % cos(roll)) 

进行测试:

>>> np.mat('1,2;3,%s' % math.cos(2)) 
matrix([[ 1.  , 2.  ], 
     [ 3.  , -0.41614684]]) 
+0

好的尝试,但'roll = np.inf'给出'TypeError:提供的无效数据字符串:nan'。通过字符串传递数据总是一个坏主意 – Eric

+0

@Eric,什么? Op显然是一个matlab用户。而cos(inf)未定义的事实是如此重要? –

+0

'cos(inf)'很好地定义了返回'nan',所以我期望结果是一个包含'nan'的矩阵,但是当给出一个不寻常的字符串时,会有'np.mat'的余数。更重要的是,它也失去了精确性。 – Eric