类型错误 numpy dtype int

TypeError numpy dtype int

你好,我有一个非常简单的问题。但我不明白是什么导致了这个问题。

我有以下 python(3) 脚本。我有 numpy 1.13.1(一个旧的,但我的 dtype 问题应该有效)。 根据 this 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 更改为 intint32int64 时,它失败了。可能 float 以外的任何东西都失败了。我想这不应该那样做! 我可以添加一个小修复程序,这样 int(np.ceil(...)) 结果就是我想要的。

  1. 请问是什么原因造成的?因为我没有在 numpy 参考手册中阅读任何有关此问题的内容(numpy reference ceil)。

  2. 如果可能的话按照我开始的方式解决这个问题

谢谢

失败的原因与 numpy ufuncs 如何处理 dtype 有关。它不仅会覆盖输出数据类型,还会覆盖计算的 dtypeceil ufunc 不支持涉及整数的计算,因此失败:

From the docs 对于 ufunc kwargs:

dtype

Overrides the dtype of the calculation and output arrays. Similar to signature.