你好,我有一个非常简单的问题。但我不明白是什么原因造成的。
我有以下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
更改为int
,int32
或int64
时,它失败了。可能是float
以外的其他任何项目都失败了。我想这不应该这样做!
我可以添加一个小的修订,以便int(np.ceil(...))
的结果就是我想要的。
我想知道导致此问题的原因?由于我没有在numpy参考手册中阅读任何有关this(this)的问题。
如果可能的话,可以解决这个问题,就像我开始时一样
谢谢
答案 0 :(得分:1)
此失败的原因仅与numpy ufuncs如何处理dtype
有关。它不仅会覆盖输出dtype,还会覆盖计算的 dtype 。 ceil
ufunc不支持涉及整数的计算,因此会失败:
From the docs for ufunc kwargs
:
dtype
覆盖计算和输出数组的dtype。类似于签名。