使用 `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
设置为float64
、float32
、float
,它们都不起作用,而int
、int32
、int64
起作用。但是,仅将 int
作为输入是不太可接受的。
更好地查看文档。使用此链,您可以创建一个 numpy 数组 -> 在 cupy.ndarray 中转换 -> 在其上计算 std。 (在 google colab 中,它让我使用 cp.std 并说找不到 cp.nanstd,我不知道为什么,也许是更新版本的库......)
cp.ndarray 将作为要创建的新数组的参数维度,因此创建一个填充随机值的 1x2x3x4x5 矩阵。抱歉,一开始就误解了以上是关于使用 `cupy.nanstd` 和 `cupy.nanvar` 时的`TypeError`的主要内容,如果未能解决你的问题,请参考以下文章
cupy.RawModule 使用 name_expressions 和 nvcc 和/或路径