TypeError numpy dtype int - PullRequest
       28

TypeError numpy dtype int

0 голосов
/ 19 сентября 2018

Здравствуйте, у меня очень простая проблема.но я не понимаю, в чем причина проблемы.

У меня есть следующий скрипт python (3).у меня numpy 1.13.1 (старый, но моя проблема с dtype должна работать).в соответствии с этот тип d существует в ufunc начиная с 1.6

import numpy as np

M=1001

N = 2 ** np.ceil(np.log2(M))

N
Out[252]: 1024.0

2 ** np.ceil(np.log2(M),dtype=int)
Traceback (most recent call last):

  File "<ipython-input-253-4b982a04c884>", line 1, in <module>
    2 ** np.ceil(np.log2(M),dtype=int)

TypeError: No loop matching the specified signature and casting
was found for ufunc ceil




2 ** np.ceil(np.log2(M),dtype=float)
Out[254]: 1024.0




2 ** np.ceil(np.log2(M),dtype=np.float64)
Out[256]: 1024.0

2 ** np.ceil(np.log2(M),dtype=np.float32)
Out[257]: 1024.0

2 ** np.ceil(np.log2(M),dtype=np.int64)
Traceback (most recent call last):

  File "<ipython-input-258-9902fa43f3ac>", line 1, in <module>
    2 ** np.ceil(np.log2(M),dtype=np.int64)

TypeError: No loop matching the specified signature and casting
was found for ufunc ceil




2 ** np.ceil(np.log2(M),dtype=np.int32)
Traceback (most recent call last):

  File "<ipython-input-259-8a2f2834384f>", line 1, in <module>
    2 ** np.ceil(np.log2(M),dtype=np.int32)

TypeError: No loop matching the specified signature and casting
was found for ufunc ceil

Как вы можете видеть, когда я меняю dtype на int, int32 или int64это терпит неудачу.Вероятно, что-то кроме float терпит неудачу.Я предполагаю, что это не должно делать это!Я могу добавить небольшое исправление, чтобы int(np.ceil(...)) получил желаемый результат.

  1. Я хочу знать, в чем причина этой проблемы?Так как я не читаю ничего в справочном руководстве numpy о любой проблеме с этим ( ссылка numy ceil ).

  2. Если возможно, решить эту проблему, чтобы онаработает так, как я начал

Спасибо

1 Ответ

0 голосов
/ 19 сентября 2018

Причина, по которой это не получается, связана просто с тем, как dtype обрабатывается numpy ufuncs.Он не только переопределяет выходной тип d, но также dтип вычисления .ceil ufunc не поддерживает вычисления с целыми числами, поэтому он терпит неудачу:

Из документов для ufunc kwargs:

dtype

Переопределяет d-тип расчетных и выходных массивов.Аналогично подписи.

...