NumPy массив Prod против умножить элементы списка - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу сделать несколько пунктов списка.Я сделал это с помощью numpy и цикла python. Результаты разные.

Подскажите, пожалуйста, в чем проблема?

Код Numpy

import numpy as np
a= [5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5]
print (np.prod(a))
>> 2039787520

Код Python без Numpy

a= [5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5]
k=1
for i in a:
    k*=i
print (k)
>> 23514624000

Другой случай:

Код NUMPY

a= [4, 7, 6, 5, 4, 5, 6, 8, 2, 8, 4, 8, 9]
import numpy as np
print (np.prod(a))
>> -579076096

без NUMPY

a= [4, 7, 6, 5, 4, 5, 6, 8, 2, 8, 4, 8, 9]
k=1
for i in a:
    k*=i
print (k)
>> 3715891200

Вопрос: почему во втором случае результат минус и отличается?

1 Ответ

1 голос
/ 19 апреля 2019

Python-значения имеют произвольную точность.NumPy dtypes не являются;целочисленный dtype по умолчанию в NumPy соответствует C long, который является 32-битным на вашей платформе.Вычисление, которое требует слишком больших чисел для длины C, будет переполнено.

Вы можете указать больший тип d для хранения больших чисел, но вы не можете хранить произвольно большие числа.

Без переполнения:

In [2]: numpy.prod([5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5], dtype='int64')
Out[2]: 23514624000

Переполнение буфера:

In [3]: numpy.prod([10000, 10000, 10000, 10000, 10000, 10000], dtype='int64')
Out[3]: 2003764205206896640
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...