I'm working with CuPy at the moment. I've noticed something that seems to be a bug, but I'm not sure.
I've noticed that if I use certain math functions, they result in the wrong shape. For example:
if I do this using numpy it returns a scalar with no shape. As it should.
s8 = numpy.abs(2)
However if I use CuPy:
s8 = cupy.abs(2)
It results in cupy.ndarray
. When evaluated with s8.shape
, it returns ()
The frustrating part is trying to convert cupy.ndarray into a scalar with no shape. I've tried using:
cupy.Squeeze(s8)
and s8.item()
to return just the scalar. In both cases it returns the value but retains the shape. I've also tried using float(s8)
and int(s8)
. Both of which return the appropriate value type, but the array still remains.
Any thoughts on how to convert this from a cupy.ndarray to a scalar?
This is a known behavior in CuPy and is not a bug: https://docs.cupy.dev/en/stable/reference/difference.html#reduction-methods
Unlike in NumPy (which makes the distinction between scalars and 0-d arrays), all scalars in CuPy are 0-d arrays, otherwise it would unavoidably lead to a data transfer by converting them to Python scalars, which compromises the performance.