TypeError numpy dtype int

时间:2018-09-19 19:38:56

标签: python python-3.x numpy int ceil

你好,我有一个非常简单的问题。但我不明白是什么原因造成的。

我有以下python(3)脚本。我有numpy 1.13.1(一个旧版本,但是我的dtype问题应该可以解决)。 根据{{​​3}},自1.6起dtype就存在于ufunc

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参考手册中阅读任何有关this(this)的问题。

  2. 如果可能的话,可以解决这个问题,就像我开始时一样

谢谢

1 个答案:

答案 0 :(得分:1)

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

From the docs for ufunc kwargs

  

dtype

     

覆盖计算和输出数组的dtype。类似于签名。