这个报错没办法,需要用到cp.asnumpy或者cp.asarray().这两个函数转一下。
cp.asnumpy(cp.array) --> np.arrau\y
cp.asarray(np.array) --> cp.array
下面是官方的解释,其中np.allclose比较两个数组是否相同
How to write CPU/GPU agnostic code¶
CuPy 与 NumPy 的兼容性使我们能够编写 CPU/GPU 通用代码。它可以通过
cupy.get_array_module()
功能变得简单。此函数基于参数返回numpy
或cupy
模块。使用它定义 CPU/GPU 泛型函数,如下所示:>>> # Stable implementation of log(1 + exp(x)) >>> def softplus(x): ... xp = cp.get_array_module(x) ... return xp.maximum(0, x) + xp.log1p(xp.exp(-abs(x)))有时,可能需要显式转换为主机或设备阵列。
cupy.asarray()
和cupy.asnumy()
可用于不可知实现,以便从 CuPy 或 NumPy 数组获取主机或设备阵列。>>> np.allclose(x_cpu, [1, 2, 3]) True >>> np.allclose(x_gpu, [1, 2, 3]) Traceback (most recent call last): ... ValueError: object __array__ method not producing an array >>> np.allclose(cp.asnumpy(x_cpu), [1, 2, 3]) True >>> np.allclose(cp.asnumpy(x_gpu), [1, 2, 3]) True