我正在尝试使用numba在我的GPU上执行np.diff。
这是我使用的脚本;

import numpy as np
import numba

@numba.vectorize(["float32(float32, float32)"], target='cuda')
def vector_diff_axis0(a, b):
    return a + b

def my_diff(A, axis=0):
    if (axis == 0):
        return vector_diff_axis0(A[1:], A[:-1])
    if (axis == 1):
        return vector_diff_axis0(A[:,1:], A[:,:-1])

A = np.matrix([
    [0, 1, 2, 3, 4],
    [5, 6, 7, 8, 9],
    [9, 8, 7, 6, 5],
    [4, 3, 2, 1, 0],
    [0, 2, 4, 6, 8]
    ], dtype='float32')

C = my_diff(A, axis=1)
print (str(C))

这是我得到的错误;
TypeError: No matching version.  GPU ufunc requires array arguments
to have the exact types.  This behaves like regular ufunc with casting='no'.

有人知道原因吗?

PS:我用这部影片做剧本;
https://youtu.be/jKV1m8APttU?t=388

编辑 :
感谢您的快速解答!

我在np.matrix中添加了dtype ='float32',但是现在出现了这个错误;
已知签名:
*(float32,float32)-> float32
文件“”,第5行
[1]期间:解析被叫者类型:Function(
签名=(float32,float32)-> float32>)
[2]期间:在(5)处键入通话

我还尝试在签名中使用float32 [:],但是它不起作用,在我跟随的视频中,他们也没有这样做

最佳答案

矩阵的dtype将为int32,它与vector_diff_axis0的签名不匹配,因为它需要float32。您需要制作矩阵float32,即在调用dtype='float32'时传递参数np.matrix

关于python - Numba python3获取错误[GPU ufunc要求数组参数具有确切的类型。],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44997860/

10-13 08:53