使用 `cupy.nanstd` 和 `cupy.nanvar` 时的`TypeError`

Posted

技术标签:

【中文标题】使用 `cupy.nanstd` 和 `cupy.nanvar` 时的`TypeError`【英文标题】:`TypeError` when using `cupy.nanstd` and `cupy.nanvar` 【发布时间】:2019-12-05 08:32:27 【问题描述】:

cupy 在 Windows 10 上运行以下代码时引发 TypeError

import cupy as cp
print(cp.nanstd(cp.asarray([1, 2, 3, 4, 5], dtype='float64')))

错误如下:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-167-1194b91fc5af> in <module>
      1 import cupy as cp
      2 
----> 3 cp.nanstd(cp.asarray([1, 2, 3, 4, 5], dtype='float64'))

~\Anaconda3\envs\py37\lib\site-packages\cupy\statistics\meanvar.py in nanstd(a, axis, dtype, out, ddof, keepdims)
    219     # TODO(okuta): check type
    220     return _statistics._nanstd(
--> 221         a, axis=axis, dtype=dtype, out=out, ddof=ddof, keepdims=keepdims)

cupy/core/_routines_statistics.pyx in cupy.core._routines_statistics._nanstd()

cupy/core/_routines_statistics.pyx in cupy.core._routines_statistics._nanstd()

cupy/core/_routines_statistics.pyx in cupy.core._routines_statistics._nanvar()

cupy/core/reduction.pxi in cupy.core._kernel.ReductionKernel.__call__()

cupy/util.pyx in cupy.util.memoize.decorator.ret()

cupy/core/_kernel.pyx in cupy.core._kernel._decide_params_type()

cupy/core/_kernel.pyx in cupy.core._kernel._decide_params_type_core()

TypeError: Type is mismatched. _count <class 'numpy.int32'> <class 'numpy.int64'>

以下是关于我的设备的一些信息:

操作系统:Windows 10 64 位

Python:3.7.5(默认,2019 年 10 月 31 日,15:18:51)[MSC v.1916 64 位 (AMD64)]

numpy 版本:1.74.4

CuPy 版本:7.0.0

CUDA 根目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0

CUDA 构建版本:10000

CUDA 驱动程序版本:10020

CUDA 运行时版本:10000

cuBLAS 版本:10000

cuFFT 版本:10000

cuRAND 版本:10000

cuSOLVER 版本:(10, 0, 0)

cuSPARSE 版本:10000

NVRTC 版本:(10, 0)

cuDNN 构建版本:7605

cuDNN 版本:7605

NCCL 构建版本:无

NCCL 运行时版本:无

提前感谢任何可以提供帮助的人!

【问题讨论】:

【参考方案1】:

编辑

import cupy as cp
import numpy as np
cp.nanstd(cp.asarray(np.asarray([1, 2, 3, 4, 5], dtype='float64')))

或者

cp.nanstd(cp.array([1, 2, 3, 4, 5], dtype='float64'))

【讨论】:

感谢您的帮助,但使用 cp.nanstd(cp.ndarray(5, dtype='float64')) 时出现了同样的错误 我想原因 5 不是一个数组。尝试使用 [5] 而不是 5。或者如果您说它根本不起作用,您可以尝试输入一个元组而不是数组,因为它似乎是文档 @ 中的方法所接受的类型987654321@ 谢谢,我更改为 [5] 但仍然无法正常工作。我还尝试将dtype 设置为float64float32float,它们都不起作用,而intint32int64 起作用。但是,仅将 int 作为输入是不太可接受的。 更好地查看文档。使用此链,您可以创建一个 numpy 数组 -> 在 cupy.ndarray 中转换 -> 在其上计算 std。 (在 google colab 中,它让我使用 cp.std 并说找不到 cp.nanstd,我不知道为什么,也许是更新版本的库......) cp.ndarray 将作为要创建的新数组的参数维度,因此创建一个填充随机值的 1x2x3x4x5 矩阵。抱歉,一开始就误解了

以上是关于使用 `cupy.nanstd` 和 `cupy.nanvar` 时的`TypeError`的主要内容,如果未能解决你的问题,请参考以下文章

cupy.RawModule 使用 name_expressions 和 nvcc 和/或路径

无法使用 pip 安装 CuPy 和 PyTorch

如何在 Cupy 中使用多个 GPU?

Python 模块 Cupy 函数在使用 cupy.einsum() 时出错

与 numpy 相比,cupy 代码不够快

cuda 与 cupy 和 tensorRT 的流同步问题