如何将 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 将不可避免地导致数据传输标量,这会影响性能。
我目前正在使用 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 将不可避免地导致数据传输标量,这会影响性能。