gpt4 book ai didi

python - 索引时 Numba 类型发生变化

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:30 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题。以下代码(函数的一部分)

@njit
def treedist(treedists, An, Bn, w, M, Theta):
print(An)
print(Bn)
print(An[1])
print(Bn[1])

打印以下内容:

[(0.0, 1), (1.0, 18.071077087009371), (0.0, 0)]
[(0.0, 1), (1.0, 25.897262991223062), (0.0, 0)]
(1.0, 18)
(1.0, 25)

由于某种原因,元组中第二个元素的 float64 被转换为 int64。谁能告诉我为什么会这样?

谢谢!

最佳答案

我认为问题如下 - Numba 只能处理常量类型的列表,因此它会查看您的列表并检查第一个元素并查看其类型 (float64, int64)。如果您查看以下内容,您就会看到这一点:

treedist.inspect_types()

treedist.inspect_llvm()

运行该函数后。然后它对 future 的类型做出假设。如果您将所有元组更改为具有一致的类型:

An = [(0.0, 1.0), (1.0, 18.071077087009371), (0.0, 0.0)]

当您打印 An[1] 时,您不会将其强制转换为 int。

如果您有一个键入不一致的项目列表,numba 将失败(不幸的是,它是默默执行的)。请参阅说明列表必须严格同构的文档:

http://numba.pydata.org/numba-doc/0.29.0/reference/pysupported.html#list

它没有“拒绝”您的元组的事实可能是因为它没有正确处理不遵循正确约定的复杂对象。

关于python - 索引时 Numba 类型发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41148463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com