numpy
アレイで.sum()
を使って落とし穴を見つけたようですが、説明が見つかりません。本質的には、大きな配列を合計しようとすると無意味な解答が始まりますが、は暗黙のうちにとなり、私は出力を十分に理解することができません。例えばnumpy.sum()大きな配列で奇妙な結果が出る
、これは期待どおりに動作します:
の両方に同じ出力を与えるa = sum(xrange(2000))
print('a is {}'.format(a))
b = np.arange(2000).sum()
print('b is {}'.format(b))
:
a is 1999000
b is 1999000
しかし、これは動作しません:
c = sum(xrange(200000))
print('c is {}'.format(c))
d = np.arange(200000).sum()
print('d is {}'.format(d))
を与えます次の出力:
c is 19999900000
d is -1474936480
さらに大きな配列では、肯定的な結果を得ることができます。珍しいことが全く起こっていないことを特定できないので、これはもっと狡猾です。たとえば、この:
e = sum(xrange(100000000))
print('e is {}'.format(e))
f = np.arange(100000000).sum()
print('f is {}'.format(f))
はこれを与える:
e is 4999999950000000
f is 887459712
私はが、これはデータ型と関係していたし、実際にもパイソンfloat
を使用して問題を解決するために思われることを推測:
e = sum(xrange(100000000))
print('e is {}'.format(e))
f = np.arange(100000000, dtype=float).sum()
print('f is {}'.format(f))
寄付:
e is 4999999950000000
f is 4.99999995e+15
私はCompで背景がありません。 Sci。自分が立ち往生しているのを見つけました(おそらくこれは詐欺です)。私が試したこと:
numpy
アレイのサイズは固定です。いいえ。 thisが最初にMemoryError
を打つべきであると思われるようです。- 私は何とか32ビットインストールをしている可能性があります(おそらく関連性がありません)。いいえ、私はthisに続き、私が64ビットを持っていることを確認しました。
- 奇妙なその他の例
sum
動作;いいえ(?)私はthisを見つけましたが、それがどのように当てはまるのか分かりません。
誰かが私が紛失していることを簡単に説明し、私が何を読みたいのか教えてもらえますか?また、毎回dtype
を定義することを覚えておく以外にも、これをやめたり、警告を出す方法はありますか?
おそらく関連:Pythonの2.7にEnthoughtキャノピーの不足
のWindows 7
numpy
1.11.3
。9
をnumpy'整数がC型整数に依存している、おそらく 'ので、 Pythonは無制限の整数範囲を持っています。浮きは浮きます。彼らは非常に高くなる可能性があります。 –
'np.arange(5).dtype'を確認してください。おそらく、64ビットの代わりに32ビットの整数を使用しています。また、同じPythonインストールでこれらのチェックをすべて実行していることを確認してください。 – user2357112
ある種のオーバーフローのように見えます...整数の符号も上書きされているようですが、これは時には否定的な結果を得る理由かもしれません。 – keksnicoh