Skip to contents

Multiplies array elements along the specified axes. A boolean array is multiplied as zeroes and ones, like base::prod() does.

Usage

nv_reduce_prod(x, axes = NULL, drop = TRUE, nan_rm = FALSE)

Arguments

x

(arrayish)
One input. Can be any data type. An R value materializes at its default data type.

axes

(integer() | NULL)
Axes to reduce over. Negative values count from the end, i.e. -1 refers to the last axis. If NULL (default), reduces over all axes.

drop

(logical(1))
Whether to drop the reduced axes: removed from the output shape if TRUE, set to 1 if FALSE.

nan_rm

(logical(1))
How to handle NaN values in float inputs. If FALSE (default), NaN propagates. If TRUE, NaN values are skipped.

Value

(arrayish)
Has the input's data type, except a boolean input, which is accumulated at the default integer data type (see default_dtypes()). The shape is the input's with the reduced axes removed (drop = TRUE) or set to 1 (drop = FALSE).

The prod() generic

prod() reduces over all axes and, like base::prod(), takes several data arguments: prod(x, y) is the product of both arrays. na.rm becomes nan_rm. Beyond base R, named arguments are passed on, so prod(x, axes = 1L) reduces a single axis – but only when x is the only data argument.

See also

prim_reduce_prod() for the underlying primitive.

Examples

x <- nv_matrix(1:6, nrow = 2)
# no axes given: reduce over all of them
nv_reduce_prod(x)
#> AnvlArray
#>  720
#> [ CPUi32{} ] 

# reducing axis 1 removes it, drop = FALSE keeps it at size 1
nv_reduce_prod(x, axes = 1L)
#> AnvlArray
#>   2
#>  12
#>  30
#> [ CPUi32{3} ] 
nv_reduce_prod(x, axes = 1L, drop = FALSE)
#> AnvlArray
#>   2 12 30
#> [ CPUi32{1,3} ] 

# negative axes count from the end
nv_reduce_prod(x, axes = -1L)
#> AnvlArray
#>  15
#>  48
#> [ CPUi32{2} ] 

# NaN propagates unless nan_rm = TRUE
nv_reduce_prod(nv_array(c(2, NaN, 3)))
#> AnvlArray
#>  nan
#> [ CPUf32{} ] 
nv_reduce_prod(nv_array(c(2, NaN, 3)), nan_rm = TRUE)
#> AnvlArray
#>  6
#> [ CPUf32{} ]