问题描述
我注意到fill_value
中的numpy.full()
参数可以是一个数组。
>>> a = np.arange(5)
>>> a
array([0,1,2,3,4])
>>> b = np.full( (5,10),a[:,None],dtype=np.int16 )
>>> b
array([[0,0],[1,1],[2,2],[3,3],[4,4,4]],dtype=int16)
但是,我注意到CuPy中的fill_value
参数不能实现。
>>> b_gpu = cp.full( (5,dtype=np.int16 )
Traceback (most recent call last):
File "<pyshell#25>",line 1,in <module>
b_gpu = cp.full( (5,dtype=np.int16 )
File "/home/master/.local/lib/python3.6/site-packages/cupy/creation/basic.py",line 271,in full
a.fill(fill_value)
File "cupy/core/core.pyx",line 499,in cupy.core.core.ndarray.fill
File "cupy/core/core.pyx",line 510,in cupy.core.core.ndarray.fill
ValueError: non-scalar numpy.ndarray cannot be used for fill
解决方法
我找到了一种使用cp.repeat
和reshape
在GPU中复制b = np.full( (5,10),a[:,None],dtype=np.int16 )
的方法。
>>> b_gpu = cp.repeat( a,10 ).reshape(5,10)
>>> b_gpu
array([[0,0],[1,1,1],[2,2,2],[3,3,3],[4,4,4]])