Python Numpy パッケージを使用するプログラムを実装しています。配列の要素を変更して、単純に取得elem[i][j]
してに設定しようとしていelem[i][j]/10
ます。ただし、操作後に要素が 0 に設定されている何らかの切り捨てが発生し続けます。これが私のコードです:
for word in allwords:
for x in xrange(wordarrays[word].shape[0]):
for y in xrange(wordarrays[word].shape[1]):
wordarrays[word][x][y]=wordarrays[word][x][y]/10
私のコードでは、wordarrays は文字列から配列への辞書です。単純に wordarrays[word][x][y]/10 を印刷すると、切り捨ては問題ではなく、float 除算は期待どおりに進みます。私がチェックしたところ、配列にはすべて dtype=float64 が含まれているため、問題になることはありません。また、 nditerを使用して、ここで提示された方法で配列を変更しようとしました
この切り捨ての原因は何ですか? 助けてくれてありがとう!
私の異常な出力についてもう少し詳しく説明します。分割前の wordarray['chen'] のエントリは次のとおりです。
[[2. 3.]
[4. 1.]]
10 (または 10.0) で除算した後、同じ配列に対して次のようになります。
[[1.01000000e-04 1.20000000e-05]
[1.11001000e-01 1.00000000e-06]]
意味がないようです。二重のforループはそれほどpythonicではないことは認識していますが、これはnp.nditerでの反復が機能しなかったときに試してみようと思ったことです。いくつかのコメントに対処するために、10 と 10.0 の両方で割ってみました。結果は同じでした。
また、配列のエントリを置き換えずに同じ操作を実行し、除算のみを出力すると、次のようになります。
for word in allwords:
for x in xrange(wordarrays[word].shape[0]):
for y in xrange(wordarrays[word].shape[1]):
print wordarrays[word][x][y]/10
つまり、期待されるものを取得します。
[[0.2 0.3]
[0.4 0.1]]