2017-08-13 5 views
1

私はMATLABとNumPy(Python 3.x)の間で切り替える必要があります。常に私にとって問題を引き起こすのは、NumPyでベクトルが使われる方法です。 MATLABでは、ベクトルは1xnまたはnx1の行列以外には何もありません。例を提供するには:ベクトル表現matlab対numpy

b=np.array([0,2]) 

すること(2)配列であり、その場合には、私が前にb.reshape(2,1)ような何かを持っているので、実際には任意の行列演算のために有用ではありません。ほとんどの場合、関数によって返されるベクトル/配列の形状を変更する必要があります。 NumPy配列がデフォルトで列または行ベクトルのように扱われない理由を教えてもらえますか?そして私はそれを頻繁にやらなければならないので...それを行う最善の方法を作り直していますか?

+0

(n、1)配列が必要な場合は、通常は 'b [:, None]'を使用します。 'numpy'は通常、(n、)配列を(1、n)として扱います。つまり、必要に応じて最初に新しいdimを追加します。 Matlabは反対側で暗闇を費やします。 – hpaulj

答えて

1

IMHO、Numpyの配列ベースの構文は、Matlabの線形代数ベースの構文よりはるかに柔軟で便利です。ほとんどの場合、numpyコードはよりきれいになり、書き込み/追跡が容易になります。 単純な Matlabの構文がよりわずかにの線形代数演算を実行しているときに例外が発生します。

多くの場合、matlabの操作を模倣するために、reshape numpy配列は必要ありません。たとえばA.dot(b)または[email protected](python 3)の場合、Aが行列(2次元numpy.array)である場合は、MatlabではA*bと本質的に同じです。 numpyに慣れる時間を与えてください。Matlabはnum32ではなくreshape関数を過度に乱用するよう強制します。

+0

私はこれが本当だったことを望みますが、スライスすることは忘れてはいけない悪夢です。 – percusse

+0

@percusseそれはおそらく本当です。しかし、私はこの悪夢はmatlabでさらに悪いと思う! :) – Stelios