TypeError numpy dtype int

1

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

У меня есть следующий сценарий python (3). У меня есть numpy 1.13.1 (старый, но моя проблема с dtype должна работать). в соответствии с этим dtype существует в 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 о какой-либо проблеме с этим (numpy reference ceil).

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

Спасибо

  • 1
    Думайте о том, что делает ceil , нет смысла делать это для int . Когда вы указываете dtype , вы не просто указываете тип возвращаемого значения, но и dtype, с которым также выполняется вычисление. Не стесняйтесь изменить результат на целое число после выполнения расчета, но ожидается то, что вы видите в данный момент. Немного лучше обсуждения здесь
Теги:
numpy
python-3.x
int
ceil

1 ответ

1

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

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

dtype

Переопределяет тип вычислений и выходных массивов. Подобно подписи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню