从python列表创建cupy数组很慢

时间:2019-07-29 15:37:44

标签: python cupy

我正在使用cupy进行以下操作,这非常快:

import cupy as cp

shape = (256, 170, 256)

deformation = cp.meshgrid(cp.arange(shape[0]),
                          cp.arange(shape[1]),
                          cp.arange(shape[2]),
                          indexing='ij')

但是,如果我将其转换为以下数组:

deformation = cp.array(cp.meshgrid(cp.arange(shape[0]),
                                   cp.arange(shape[1]),
                                   cp.arange(shape[2]),
                                   indexing='ij'))

这似乎很慢,或者只是挂起(5分钟后我放弃了)。我不确定我在做什么错。

我还尝试将copy=False传递给cp.array调用,但这没有任何改变。

1 个答案:

答案 0 :(得分:1)

我不支持这种从cupy数组列表到cupy数组的转换。如果我缩小您的shape,例如(8,8,8)我收到python错误。

如果我们为cupy.meshgrid研究the documentation,我们会看到它返回:

  

返回:cupy.ndarray的列表

丘比特documentation具体说:

  

当前,cupy.array()cupy.asarray()无法从包含CuPy数组(例如CuPy数组列表)的Python对象创建数组。请改用cupy.stack()

使用那里的建议,这对我来说似乎相对较快:

$ cat t6.py
import cupy as cp

shape = (256, 170, 256)

deformation = cp.stack(cp.meshgrid(cp.arange(shape[0]),
                          cp.arange(shape[1]),
                          cp.arange(shape[2]),
                          indexing='ij'))
$ time python t6.py

real    0m1.281s
user    0m0.608s
sys     0m0.492s
$