类型错误 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
更改为 int
、int32
或 int64
时,它失败了。可能 float
以外的任何东西都失败了。我想这不应该那样做!
我可以添加一个小修复程序,这样 int(np.ceil(...))
结果就是我想要的。
请问是什么原因造成的?因为我没有在 numpy 参考手册中阅读任何有关此问题的内容(numpy reference ceil)。
如果可能的话按照我开始的方式解决这个问题
谢谢
失败的原因与 numpy ufuncs 如何处理 dtype
有关。它不仅会覆盖输出数据类型,还会覆盖计算的 dtype。 ceil
ufunc 不支持涉及整数的计算,因此失败:
From the docs 对于 ufunc kwargs
:
dtype
Overrides the dtype of the calculation and output arrays. Similar to signature.
你好,我有一个非常简单的问题。但我不明白是什么导致了这个问题。
我有以下 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
更改为 int
、int32
或 int64
时,它失败了。可能 float
以外的任何东西都失败了。我想这不应该那样做!
我可以添加一个小修复程序,这样 int(np.ceil(...))
结果就是我想要的。
请问是什么原因造成的?因为我没有在 numpy 参考手册中阅读任何有关此问题的内容(numpy reference ceil)。
如果可能的话按照我开始的方式解决这个问题
谢谢
失败的原因与 numpy ufuncs 如何处理 dtype
有关。它不仅会覆盖输出数据类型,还会覆盖计算的 dtype。 ceil
ufunc 不支持涉及整数的计算,因此失败:
From the docs 对于 ufunc kwargs
:
dtype
Overrides the dtype of the calculation and output arrays. Similar to signature.