cupy.full() 方法 fill_value 不能带数组?

Posted

技术标签:

【中文标题】cupy.full() 方法 fill_value 不能带数组?【英文标题】:cupy.full() method fill_value can't take an array? 【发布时间】:2020-08-31 23:06:14 【问题描述】:

我注意到numpy.full() 中的fill_value 参数可以是一个数组。

>>> 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, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]], dtype=int16)

但是,我注意到 CuPy 中的 fill_value 参数不能。

>>> b_gpu = cp.full( (5,10), a[:,None], dtype=np.int16 )
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    b_gpu = cp.full( (5,10), a[:,None], 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 的方式有错误?

【问题讨论】:

【参考方案1】:

我找到了一种使用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, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]])

【讨论】:

以上是关于cupy.full() 方法 fill_value 不能带数组?的主要内容,如果未能解决你的问题,请参考以下文章

pandas DataFrame 添加 fill_value NotImplementedError

pandas使用reindex函数为日期索引中有缺失日期的dataframe进行索引重置(所有日期都连续)并使用fill_value参数为行进行默认填充

pandas 基本操作

pandas基础运算

利用griddata进行二维插值

数据透视表和数据交叉表