A piecewise function of NumPy can be realized.
f(x) = \left\{
\begin{array}{ll}
x^2 & (x \geq 0) \\
0 & (x \lt 0)
\end{array}
\right.
This is written piecewise as follows.
import numpy as np
x = np.arange(-4, 5)
np.piecewise(x, [x >= 0, x < 0], [lambda v: v ** 2, 0])
When you do this,
array([ 0, 0, 0, 0, 0, 1, 4, 9, 16])
Will be. It is the square of x in the range of x> = 0, and 0 in the range of x <0.
CuPy does not support piecewise (as of v7.2), so it will be described in another way. .. Write without using if statements with poor performance.
It's easy to write, just add up the result of multiplying the classification condition and the function value.
import cupy as cp
x = cp.arange(-4, 5)
positive_condition = x >= 0
positive_value = x ** 2
negative_condition = x < 0
negative_value = 0
positive_condition * positive_value + negative_condition * negative_value
When you do this,
array([ 0, 0, 0, 0, 0, 1, 4, 9, 16])
And the same result as piecewise.
This way of writing is of course valid in NumPy.
Recommended Posts