Похоже, что numpy по умолчанию интерпретирует простые числа как np.int32
(который имеет диапазон от -2 31 ... 2 31 - 1), который переполняется 40000*80000
, потому что 3200000000 > 2**31 - 1 (= 2147483647)
:
import numpy as np
a = np.array([[30000,40000]])
b = np.array([[70000,80000]])
np.multiply(a,b)
Out: array([[ 2100000000, -1094967296]])
type(a[0][0])
Out: numpy.int32
Вы можете решить эту проблему, явно указав более подходящий тип данных:
a = np.array([[30000,40000]], dtype=np.int64)
b = np.array([[70000,80000]], dtype=np.int64)
np.multiply(a,b)
Out: array([[2100000000, 3200000000]], dtype=int64)
или
a = np.array([[30000,40000]], dtype=np.uint32)
b = np.array([[70000,80000]], dtype=np.uint32)
np.multiply(a,b)
Out: array([[2100000000, 3200000000]], dtype=uint32)