在 cupy 中不需要时尝试进行 numpy 转换

Attempting numpy conversion when not needed in cupy

使用 python3.8 与 cupy-cuda111

创建一个 cupy 数组并尝试转换为 cp.int_ 导致 cupy 假设隐式转换为 numpy 数组

import cupy as cp

def test_function(x):
    y = cp.int_(x * 10)
    return(y)

x = cp.array([0.1, 0.2, 0.3, 0.4, 0.5])
y = test_function(x)

print(y)

我假设这会乘以标量和 return ([1, 2, 3, 4, 5], dtype=cp.int_) 而是给出:

TypeError: Implicit conversion to a NumPy array is not allowed. Please use `.get()` to construct a NumPy array explicitly.

为什么会产生这个错误?

如何将 cp.array 相乘并转换为 int_?

你可以做到

x = x * 10
y = x.astype(cp.int_)
return y

问题是 cp.int_np.int_,所以调用它会调用主机函数来操作 GPU 数组,这是不允许的。

现在数据在GPU中运行,可以在GPU中查看数据,也可以通过设备功能CPU查看数据。

错误提示可以通过get()函数将其转换为CPU,然后通过type()函数检查数据类型,会发现是numpy.ndarray,但不是cupy.core.core.ndarray

最后:

def test_function(x):
    y = (x * 10).astype(cp.int_)
    return y