Другой результат произведения всех чисел в списке с использованием Numpy и использованием цикла for - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть список чисел:

numbers = [12, 10, 32, 3, 66, 17, 42, 99, 20]

Я хочу напечатать произведение всех чисел в списке (все умножаются вместе).Я сделал это с Numpy:

import numpy
print(numpy.product(numbers))

и используя цикл for:

total = 1
for number in numbers:
    total *= number
print(total)

Почему первый (с Numpy) выводит 1137766400, а второй (с циклом for) 1074879590400?Разве я не должен получить тот же результат?Я не понимаю разницы, что является правильным продуктом?

Я пытался отформатировать мой код другим способом (numpy.prod (), total = total * number), но это (конечно) дает одинаковые выходы.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Вы получаете целочисленное переполнение, попробуйте указать dtype вручную;т.е.

import numpy as np

numbers = [12, 10, 32, 3, 66, 17, 42, 99, 20]

total = 1
its = 0

for number in numbers:
    total *= number
    its +=1

print(f'After {its} iterations total is {total}, numpy product is {np.prod(numbers,dtype=np.int64)} numpy version {np.version.version}')
0 голосов
/ 23 апреля 2019

Правильный ответ: 1 074 879 590 400. Вы получаете другой результат от numpy, потому что вы предоставляете ему целые числа, и вы получаете переполнение целых чисел. С другой стороны, целые числа Python не переполняются. Измените свой список на

numbers = [12., 10., 32., 3., 66., 17., 42., 99., 20.]

и вы увидите, что оба метода дают одинаковый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...