私は非常に大きな整数でnumpy.divmod
を使用しようとしていました。私は奇妙な動作に気付きました。周り2**63 ~ 1e19
(3.5+ Pythonでint
の通常のメモリ表現の限界であるべき)で、この問題が発生した:どういうわけかPython numpy.divmodと整数表現
from numpy import divmod
test = 10**6
for i in range(15,25):
x = 10**i
print(i, divmod(x, test))
15 (1000000000, 0)
16 (10000000000, 0)
17 (100000000000, 0)
18 (1000000000000, 0)
19 (10000000000000.0, 0.0)
20 ((100000000000000, 0), None)
21 ((1000000000000000, 0), None)
22 ((10000000000000000, 0), None)
23 ((100000000000000000, 0), None)
24 ((1000000000000000000, 0), None)
、商と余りは2**63
まで正常に動作し、その後、別の何かがあります。
私の推測では、int
表現は(Long
のリトルエンディアンSeq
として、すなわち、ScalaではBigInt
ように)「ベクトル化」であるということです。しかし、私は、divmod(array, test)
という結果として、商の配列と剰余の配列のペアを期待しています。
私はこの機能について手掛かりがありません。組み込みdivmodでは発生しません(すべて正常に動作します)
これはどうしてですか?それはint
の内部表現で関係がありますか?
詳細:numpyのバージョン1.13.1、のpython 3.6
私は[バグレポート](https://github.com/numpy/numpy/issues)を提出することをお勧めします。あなたの質問が何であるかはわかりません(たぶんバグのある行動を見せてくれることは別として)。 – MSeifert
もっと正確な質問を追加しました。バグかもしれないが、合理的な(そして一貫した)説明があるのだろうか。 – pazqo