Numpy: Понимание массива в силу массива - PullRequest
0 голосов
/ 25 сентября 2019

Я просматривал операторы с массивами-пустышками и обнаружил то, чего не ожидал и что не знаю, как его интерпретировать.

Я выполняю операцию, являющуюся массивом A в силу массива Bясно, что A и B имеют одинаковую форму.Поведение, которое я ожидаю, - это «поэлементная сила»: каждый элемент A соответствует степени соответствующих элементов в B. Однако, похоже, что происходит что-то еще.

import numpy as np

values = list(range(1, 10))
array_1d = np.array(values)

print(array_1d ** (array_1d * 5))

Итак, я 'м [1, 2, 3, 4, 5, 6, 7, 9] до степени [5, 10, 15, 20, ...].Ожидаемый результат (в моей голове) эквивалентен [v ** (v*5) for v in list(range(1,10))], то есть:

 [1,
 1024,
 14348907,
 1099511627776,
 298023223876953125,
 221073919720733357899776,
 378818692265664781682717625943,
 1329227995784915872903807060280344576,
 8727963568087712425891397479476727340041449].

Однако вывод:

array([ 1, 1024, 14348907, 0, 167814181, 1073741824, 613813847, 0, -1054898967], dtype=int32)

Кто-то знает причину этого результата?Что на самом деле здесь происходит?Спасибо!

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Проблема в используемом типе данных, попробуйте:

v = arange(1,10, dtype='int32')
print(v ** (5*v))

v = arange(1,10, dtype='int64')
print(v ** (5*v))

v = arange(1,10, dtype='float')
print(v ** (5*v))
1 голос
/ 25 сентября 2019

dtype=int32 вы переполняете целые числа и возвращаете цикл:

1099511627776 % (2**32) == 0
298023223876953125 % (2**32) == 167814181
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...