cupy.full方法fill_value不能接受数组?

问题描述

我注意到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

是否缺少功能或编写CuPy的方式有错误

解决方法

我找到了一种使用cp.repeatreshape在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]])