2016-07-18 2 views
0

私はsmop pythonのmatlabコードを変換するpythonスクリプトを使用しています。私のテストMATLABコードでSMOP悪い変換

は、私はこれ持っている:

a=10^6*[355,355,373,373,373,373,373]' 

をし、それは私が変換する必要が.T

のすべての問題の最初の

a = 10 ** 6 * [355,355,373,373,373,373,373].T 

に私を生成し、 〜

a = [355,355,373,373,373,373,373] 
a=numpy.asarray(a).T.tolist() 

その後、他のは、他よりもずっと深刻な、

10 ** 6 * [355,355,373,373,373,373,373] 

は10^6と、配列の各要素を掛けるが、配列の10^6回、各要素を複製しません。

何が問題なのですか?

答えて

1

問題は、Pythonでは演算子*が多型であることです。オペランドが数値の場合は両方の数値の積を返しますが、一方のオペランドが整数(たとえばn)で、もう一方がシーケンス(つまり文字列、リストまたはタプル)の場合は、シーケンスnを連結して結果のシーケンスを返します。もし1つのオペランドが数値で、他方はnumpyの配列、*行う要素ごとの乗算であることも注目に値するです:

>>> 5*2 
10 
>>> 'ha'*3 
hahaha 
>>> [1]*4 
[1, 1, 1, 1] 
>>> ('a', .5)*3 
('a', 0.5, 'a', 0.5, 'a', 0.5) 
>>> .1*numpy.array([10, 20, 30]) 
array([ 1., 2., 3.]) 

このようなあなたのコードを書き換えるようにしてください:

>>> a = (10**6*numpy.array([355, 355, 373, 373, 373, 373, 373])).reshape(-1, 1).tolist() 
>>> a 
[[355000000], 
[355000000], 
[373000000], 
[373000000], 
[373000000], 
[373000000], 
[373000000]] 
+0

のでSMOP大きな問題があります。私は私の大きなMATLABコード内のすべての乗算を変換することはできません。 – JackTurky

+0

@JackTurky numpyには[element-wise multiplication]があります(http://docs.scipy.org/doc/numpy/reference/generated/numpy.multiply.html) – excaza

+0

@excaza:あなたは絶対に正しいです、私は言及しませんでしたあるオペランドが数値で、もう1つがNumPy配列であれば、 '*'は要素ごとの乗算を行います。私はこの情報を含む私の答えを編集しました。 – Tonechas

関連する問題