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.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, 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参数为行进行默认填充