2016-08-30 14 views
3

私はPythonのnumpyに変換しようとしているMATLABのコードの行の次き:PythonでMatlabのPythonのnumpyのインデックスと乗算問題に

pred = traindata(:,2:257)*beta; 

、私が持っている:

pred = traindata[ : , 1:257]*beta 

betaは256 x 1の配列です。 MATLABで

size(pred) = 1389 x 1 

しかし、Pythonで、だから、

pred.shape = (1389L, 256L) 

は、私がbeta配列を乗じする二つの配列間の差を生成していることが分かりました。

predのサイズが1389 x 1になるように元のPythonの行を書くにはどうすればいいですか?私のベータ配列を乗算するとMATLABのようになりますか?

答えて

8

betaは、実際には1D numpyアレイであると思われます。 numpyでは、1D配列はMATLABがこの区別を明確にする行または列ベクトルではありません。これらは、どのような形状にも関わらず、1Dアレイに過ぎません。必要な場合は、乗算を容易にするために、新しいシングルトン次元をbetaベクトルに手動で導入する必要があります。これに加えて、*オペレータは、実際に要素ワイズの乗算を実行します。行列ベクトルまたは行列と行列の乗算を実行するには、numpydot関数を使用する必要があります。

そのため、あなたはこのような何かを行う必要があります。

import numpy as np # Just in case 

pred = np.dot(traindata[:, 1:257], beta[:,None]) 

beta[:,None] 1次元配列の要素は、行に沿って移入された2D numpy配列、効果的に列ベクトル(すなわち256×1を作るを作成します。 )。ただし、すでにbetaでこれを行っている場合は、新しいシングルトンディメンションを導入する必要はありません。ただ、通常dotを使用します。

pred = np.dot(traindata[:, 1:257], beta) 
+1

このソリューションは、私の問題を解決しました。あなたが提供したコードの最初の行を使って、私の配列はPythonで1389 x 1になりました。ありがとう! – Gary

+1

@Nick問題ありません!お役に立てて嬉しいです。がんばろう! – rayryeng

+0

別のシングルトンディメンションを追加する必要がある配列が異なる場合、どうすればよいですか?私の 'traindata'配列はちょうど '(1389L、)'です。私はどうすればそれを作るのですか(1389L、1L)? – Gary