2016-07-11 9 views
7

私は両方のウィンドウとMacでPython 3.5 64ビットと全く同じコードを実行しています。 Windows上で"OverflowError:Python intが大きすぎてC言語に変換できません" Windowsでは、しかしMacではありません

が、それは次のようになります。

>>> import numpy as np 
>>> preds = np.zeros((1, 3), dtype=int) 
>>> p = [6802256107, 5017549029, 3745804973] 
>>> preds[0] = p 
Traceback (most recent call last): 
    File "<pyshell#13>", line 1, in <module> 
    preds[0] = p 
OverflowError: Python int too large to convert to C long 

しかし、このコードは私のMac上で正常に動作します。誰かが理由を説明したり、Windows上のコードの解決策を教えたりできますか?本当にありがとう!

+0

どちらも64ビットですか?あなたはLinuxでテストできますか? – Tim

+0

両方のシステムが64ビットPython上にある場合でも、どちらも64ビットNumPyになっていますか? – user2357112

+0

もう一つのstackoverflowの質問は 'なぜ'について説明します。 Windowsではlongが32bitで、Unuxのようなものは64bitです。質問を参照してくださいhttp://stackoverflow.com/questions/384502/what-is-the-bit-size-of-long-on-64-bit-windows – VladimirM

答えて

10

あなたの番号がsys.maxsizeより大きいたら、あなたはそのエラーを取得します:

>>> p = [sys.maxsize] 
>>> preds[0] = p 
>>> p = [sys.maxsize+1] 
>>> preds[0] = p 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
OverflowError: Python int too large to convert to C long 

あなたがチェックすることでこれを確認することができます

>>> import sys 
>>> sys.maxsize 
2147483647 

に合格しない、より大きな精度で数値を取るためにシーンの背後にある有界のC整数を使用するint型です。デフォルトの浮動小数点数を使用してください:

>>> preds = np.zeros((1, 3)) 
+1

これより大きな番号を取得した場合、どのように対処するのですか? –

+1

@VeronicaWenqianCheng int dtypeを渡さないでください。デフォルトのfloatを使用してください。 –

+0

ありがとう!フロートとして保存されている –

関連する問題