web-dev-qa-db-ja.com

"OverflowError:Python intが大きすぎてC longに変換できない")

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上のコードの解決策を提供したりできますか?本当にありがとう!

21
packybear

番号が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))
16
Moses Koledoye

Dtype = intの代わりにdtype = np.int64を使用できます

2
sammy ongaya

誰もが理由を説明するのを手伝ってもらえますか

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

1
plugwash