2016-04-03 8 views
2

私はこれを2時間以上解決しようとしてきました。私のスクリプトとコンソールで出力が異なる

私はいくつかのデバッグを置くスクリプトを書かれているprint sの私は、この出力持って、それを起動

... 
print(array) 
print(m) 
print(np.dot(m.ravel(),array.ravel())) 
... 

:私はPythonのコンソールでこの現象を再現しようとすると

$ ./test.py 
[[ 0  0  0  0  0  0  0] 
[ 0  0  0  0  0  0  0] 
[ 0  0  0  0  0  0  0] 
[ 0  0  0 20303 20303 20303 20303] 
[20303 20303 20303 20303 20303 20303 20303] 
[20303 20303 20303 20303 20303 20303 20303] 
[20303 20303 20303 20303 20303 20303 20303]] 
[[False False False False False False False] 
[False False False False False False False] 
[False False False False False False False] 
[False False False False True False False] 
[False False True False True False False] 
[False False False True False False False] 
[False False False False False False False]] 
15676 

をドットプロダクトとは異なる結果が表示されます。

$ /usr/bin/python3 
Python 3.4.2 (default, Oct 8 2014, 10:45:20) 
[GCC 4.9.1] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import numpy as np 
>>> array=np.array([[ 0,  0,  0,  0,  0,  0,  0], 
[ 0,  0,  0,  0,  0,  0,  0], 
[ 0,  0,  0,  0,  0,  0,  0], 
[ 0,  0,  0, 20303, 20303, 20303, 20303], 
[20303, 20303, 20303, 20303, 20303, 20303, 20303], 
[20303, 20303, 20303, 20303, 20303, 20303, 20303], 
[20303, 20303, 20303, 20303, 20303, 20303, 20303]]) 
>>> 
>>> m=np.array([[False, False, False, False, False, False, False], 
[False, False, False, False, False, False, False], 
[False, False, False, False, False, False, False], 
[False, False, False, False, True, False, False], 
[False, False, True, False, True, False, False], 
[False, False, False, True, False, False, False], 
[False, False, False, False, False, False, False]]) 
>>> np.dot(m.ravel(),array.ravel()) 
81212 

何が原因でしょうか?ちなみに、81212は私がここで期待している結果であり、実際にスクリプトで何が起こっているのか分かりません。

+1

'/ usr/bin/python3 test.py'を実行してみてください。 –

+0

Pythonインタプリタ 'test.py'はどのようなもので動作していますか? 'test.py'の[shebang](https://en.wikipedia.org/wiki/Shebang_(Unix))とは何ですか? – Finwood

+0

'#!/ usr/bin/python3' :( – nicoco

答えて

0

私のスクリプトでは、arrayのdtypeはuint16でしたが、コンソールで作成したときはint64でした。そのタイプを変換することで問題は解決しましたが、なぜそれが必要なのか分かりません。

1

ない実際問題を解決、多分回避策:

np.ravelは多分これは "奇妙な" 行動を起こしている、numpyの1.10に少し変更されました:numpyの1.10のよう

を、返される配列は、入力配列と同じ型を持ちます。 (たとえば、マスクされた配列のマスク配列が返されます)

この場合、実際にnp.ravelが必要ですか?何ちょうどboolean indexingを使用して、結果を加算について:

>>> print(array[m].sum()) 
81212 

を、これはあなたが最初の場所で達成するために何を望むかである場合、このメソッドはおそらくさらに「神託」np.dotティン平坦化配列を超えています。

+0

パフォーマンスのためにドットプロダクトが必要です。なぜ、私の以前の質問をチェックアウトhttp://stackoverflow.com/questions/35845085/n1-dim-boolean-masking-an-dim-array-with-array-of-means-as-desired-output また、私は本当にここで起こっていることを理解したいと思います。 – nicoco

関連する問題