1

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]]
4

2 に答える 2

4

これにより、パフォーマンスを大幅に向上させることができます。

for word in allwords:
    wordarrays[word] /= 10.
于 2013-07-02T09:24:50.350 に答える
1

整数で除算しているため、整数演算が実行されているためだと思います。に変更10してみてください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.0
于 2013-07-02T08:54:04.663 に答える