2017-04-18 6 views
0

私はPythonの初心者です。私はこの行列を持っています:コサインと罪を含むPythonの行列

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()をintepretして、文字列を作成した場合、これは動作することができます:

コード:テストするために

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:Invalid data strings supplied:nan'を返します。文字列を使ったデータの丸め処理は常に悪い考えです。 – Eric

+0

@Eric、何ですか? opは明らかにmatlabユーザです。そして、cos(inf)が定義されていないという事実はどのように重要ですか? –

+0

'cos(inf)'は 'nan'を返すように明確に定義されていますので、結果は' nan'を含む行列であると期待します - しかし、np.mat'は異常な文字列を与えられたときにbalksします。さらに重要なことに、精度も失われます。 – Eric

関連する問題