Python int
представлены в с произвольной точностью , поэтому они не могут переполниться . Но numpy
использует C ++ под капотом, поэтому самое большое длинное целое число со знаком имеет фиксированную точность, 2^63 - 1
. Ваш номер намного превышает это значение, имея в среднем ((716-1)/2)^86507)
.
Когда вы в цикле for
извлекаете x[0]
, это все еще объект numpy
. Чтобы использовать всю мощь целых чисел python, вам необходимо четко назначить его как python int
, например:
product_0 = 1
product_1 = 1
for x in arr:
t = int(x[0])
product_0 = product_0 * t
и не переполнится .
После вашего комментария, который делает ваш вопрос более конкретным, ваша первоначальная задача состоит в том, чтобы вычислить среднее геометрическое массива для каждой строки / столбца. Вот решение:
Сначала я генерирую массив, который имеет те же свойства, что и ваш массив:
arr = np.resize(np.random.randint(1,716,86507*2 ),(86507,2))
Затем вычислите среднее геометрическое значение для каждого столбца / строки:
from scipy import stats
gm_0 = stats.mstats.gmean(arr, axis = 0)
gm_1 = stats.mstats.gmean(arr, axis = 1)
gm_0
будет массивом, который содержит среднее геометрическое x
и y
координат. gm_1
вместо этого содержит среднее геометрическое число строк.
Надеюсь, это решит вашу проблему!