我正在尝试将 numpy 与 numba 一起使用,但是在尝试使用转换为 int 的浮点索引访问或设置一些值到浮点数组时,我得到了奇怪的结果。检查这个基本功能。
@numba.jit("void(f8[:,::1],f8[:,::1])")
def test(table, index):
x,y = int(index[0,0]), int(index[1,0)
table[y,x] = 1.0
print index[0,0], index[1,0], x,y
print table
print table[y,x]
table = np.zeros((5,5), dtype = np.float32)
index = np.random.ranf(((2,2)))*5
test(table, index)
结果:
index[0,0] = 1.34129550525 index[1,0] = 0.0656177324359 x = 1 y = 0
table[0,1] = 1.0
table [[ 0. 0. 1.875 0. 0. ]
[ 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. ]]
为什么我的表中得到 1.875 而不是 1.0?这是一个基本示例,但我正在使用大数组,它给了我很多错误。我知道我可以将索引转换为np.int32并将@numba.jit("void(f8[:,::1],f8[:,::1])")更改为@numba.jit("void(f8 [:,::1],i4[:,::1])")并且工作正常,但我想你明白为什么这不起作用。将类型从 python 解析为 c++ 时是否有问题?
谢谢你的帮助