如何将 cupy.ndarray 转换为标量?
Posted
技术标签:
【中文标题】如何将 cupy.ndarray 转换为标量?【英文标题】:How to convert a cupy.ndarray to a scalar? 【发布时间】:2020-11-30 17:55:51 【问题描述】:我目前正在使用 CuPy。我注意到一些似乎是错误的东西,但我不确定。
我注意到,如果我使用某些数学函数,它们会导致错误的形状。例如:
如果我使用 numpy 执行此操作,它会返回一个没有形状的标量。应该的。
s8 = numpy.abs(2)
但是,如果我使用 CuPy:
s8 = cupy.abs(2)
结果为@987654323@。当使用s8.shape
评估时,它返回()
令人沮丧的部分是试图将 cupy.ndarray 转换为没有形状的标量。我试过使用:
cupy.Squeeze(s8)
和 s8.item()
只返回标量。在这两种情况下,它都会返回值但保留形状。我也尝试过使用float(s8)
和int(s8)
。两者都返回适当的值类型,但数组仍然存在。
关于如何将其从 cupy.ndarray 转换为标量的任何想法?
【问题讨论】:
【参考方案1】:这是 CuPy 中的已知行为,不是错误: https://docs.cupy.dev/en/stable/reference/difference.html#reduction-methods
与 NumPy 不同(区分标量和 0-d 数组),CuPy 中的所有标量都是 0-d 数组,否则将不可避免地通过将它们转换为 Python 标量而导致数据传输,这会影响性能.
【讨论】:
这没有回答“如何将 cupy.ndarray 转换为标量?”的问题以上是关于如何将 cupy.ndarray 转换为标量?的主要内容,如果未能解决你的问题,请参考以下文章
如何将标量 Pyspark UDF 转换为 Pandas UDF?