如何将 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 转换为标量?的主要内容,如果未能解决你的问题,请参考以下文章

如何将标量数组转换为二维数组?

如何将 Tsql 标量函数转换为表函数?

如何将标量 Pyspark UDF 转换为 Pandas UDF?

SQL Server标量函数将数字转换为带有序数的单词

带有 TypeError 的 TensorRT 对象检测:只能将整数标量数组转换为标量索引

线程 Thread-5 中的异常:TypeError:只能将整数标量数组转换为标量索引