python 3.5 64ビットで、WindowsとMacの両方でまったく同じコードを実行しています。
Windowsでは、次のようになります。
>>> 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上のコードの解決策を提供したりできますか?本当にありがとう!
番号が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))
Dtype = intの代わりにdtype = np.int64を使用できます
誰もが理由を説明するのを手伝ってもらえますか
In Python 2 a python "int"はC longと同等でした。InPython 3 an "int"は任意の精度の型ですが、numpyは配列を作成するときに「int」を使用してC型の「long」を表します。
C longのサイズはプラットフォームに依存します。 Windowsでは、常に32ビットです。 Unixライクなシステムでは、通常32ビットシステムでは32ビット、64ビットシステムでは64ビットです。
またはWindows上のコードのソリューションを提供しますか?本当にありがとう!
サイズがプラットフォームに依存しないデータ型を選択します。リストは https://docs.scipy.org/doc/numpy/reference/arrays.scalars.html#arrays-scalars-built-in にあります。最も賢明な選択はおそらくnpです.int64