在 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
使用 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