数组作为数字中的函数参数
Arrays as function parameters in numba
以下简单示例因错误而失败:
独立模块:
from numba.pycc import CC
cc = CC('foo')
@cc.export('product','float64(float64[:], float64[:])')
def product(a, b):
prod = 0
for i in range(a.size):
prod += a[i] * b[i]
return prod
if __name__ == "__main__":
cc.compile()
测试程序:
import numpy as np
import foo
x = np.array([2,3,1,0])
y = np.array([2,3,1,0])
print(foo.product(x,y))
失败并显示错误消息:
Traceback (most recent call last):
File "\temp\test.py", line 7, in <module>
print(foo.product(x,y))
SystemError: exception RuntimeError<class 'BytesWarning'> not a BaseException subclass
在 Windows 上使用的 numba 版本是 0.42.0 和 Python 3.7.2。
有什么提示吗?
所以,我终于让你的代码工作了:
from numba.pycc import CC
cc = CC('foo')
cc.verbose = True
@cc.export('producti','int64(int64[:], int64[:])') #<--- Your data type was wrong
def product(a, b):
prod = 0
for i in range(a.size):
y = a[i] * b[i]
prod += y
return prod
if __name__ == "__main__":
cc.compile()
测试上述功能的代码:
import numpy as np
import foo
x = np.array([2, 3, 1, 0])
y = np.array([2, 3, 1, 0])
print(foo.producti(x, y)) # Output : 14
这里需要注意的几点:
- 您创建
x
和 y
数组的方式,dtype 默认设置为 int64
,因此当您将其类型转换为 float64
时转换不正确。
print(x.dtype)
Output : dtype('int64')
因此,只需将您的类型固定为 int64
即可解决问题(或者您可以根据需要将 i8
用作 shorthand)。
Link 到 google Colab notebook with 运行 code : Notebook Link
参考资料:
以下简单示例因错误而失败:
独立模块:
from numba.pycc import CC
cc = CC('foo')
@cc.export('product','float64(float64[:], float64[:])')
def product(a, b):
prod = 0
for i in range(a.size):
prod += a[i] * b[i]
return prod
if __name__ == "__main__":
cc.compile()
测试程序:
import numpy as np
import foo
x = np.array([2,3,1,0])
y = np.array([2,3,1,0])
print(foo.product(x,y))
失败并显示错误消息:
Traceback (most recent call last):
File "\temp\test.py", line 7, in <module>
print(foo.product(x,y))
SystemError: exception RuntimeError<class 'BytesWarning'> not a BaseException subclass
在 Windows 上使用的 numba 版本是 0.42.0 和 Python 3.7.2。 有什么提示吗?
所以,我终于让你的代码工作了:
from numba.pycc import CC
cc = CC('foo')
cc.verbose = True
@cc.export('producti','int64(int64[:], int64[:])') #<--- Your data type was wrong
def product(a, b):
prod = 0
for i in range(a.size):
y = a[i] * b[i]
prod += y
return prod
if __name__ == "__main__":
cc.compile()
测试上述功能的代码:
import numpy as np
import foo
x = np.array([2, 3, 1, 0])
y = np.array([2, 3, 1, 0])
print(foo.producti(x, y)) # Output : 14
这里需要注意的几点:
- 您创建
x
和y
数组的方式,dtype 默认设置为int64
,因此当您将其类型转换为float64
时转换不正确。
print(x.dtype)
Output : dtype('int64')
因此,只需将您的类型固定为
int64
即可解决问题(或者您可以根据需要将i8
用作 shorthand)。Link 到 google Colab notebook with 运行 code : Notebook Link
参考资料: