如何将 cupy.ndarray 转换为标量?

How to convert a cupy.ndarray to a scalar?

我目前正在使用 CuPy。我注意到一些似乎是错误的东西,但我不确定。

我注意到如果我使用某些数学函数,它们会导致错误的形状。例如:

如果我使用 numpy 执行此操作,它 return 是一个没有形状的标量。应该的。

s8 = numpy.abs(2)

但是,如果我使用 CuPy:

s8 = cupy.abs(2)

结果为 cupy.ndarray。当用 s8.shape 计算时,它 returns ()

令人沮丧的部分是试图将 cupy.ndarray 转换为没有形状的标量。我试过使用: cupy.Squeeze(s8)s8.item() 到 return 只是标量。在这两种情况下,它 return 都是值但保留形状。我也尝试过使用 float(s8)int(s8)。两者都是 return 合适的值类型,但数组仍然保留。

关于如何将其从 cupy.ndarray 转换为标量有什么想法吗?

这是 CuPy 中的已知行为,不是错误: https://docs.cupy.dev/en/stable/reference/difference.html#reduction-methods

与 NumPy 不同(它区分了标量和 0 维数组),CuPy 中的所有标量都是 0 维数组,否则将它们转换为 Python 将不可避免地导致数据传输标量,这会影响性能。