[PYTHON] Réécrire NumPy par morceaux pour CuPy

NumPy par morceaux

Une fonction de partition peut être réalisée avec par morceaux de NumPy.

f(x) = \left\{
\begin{array}{ll}
x^2 & (x \geq 0) \\
0 & (x \lt 0)
\end{array}
\right.

Ceci est écrit par morceaux comme suit.

import numpy as np

x = np.arange(-4, 5)
np.piecewise(x, [x >= 0, x < 0], [lambda v: v ** 2, 0])

Quand tu fais ça,

array([ 0,  0,  0,  0,  0,  1,  4,  9, 16])

Sera. C'est le carré de x dans la plage de x> = 0 et 0 dans la plage de x <0.

Comment ne pas utiliser piesewise

CuPy ne prend pas en charge par morceaux (à partir de la v7.2), il sera donc décrit d'une autre manière. .. Écrivez sans utiliser d'instructions if avec des performances médiocres.

C'est facile à écrire, additionnez simplement le résultat de la multiplication de la condition de classification et de la valeur de la fonction.

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

Quand tu fais ça,

array([ 0,  0,  0,  0,  0,  1,  4,  9, 16])

Et le même résultat que par morceaux.

Bien entendu, cette méthode d'écriture est également valable pour NumPy.

Recommended Posts

Réécrire NumPy par morceaux pour CuPy
Vitesse de calcul de l'indexation pour un tableau quadratique numpy
À propos de tout numpy
Fonction de réglage NumPy
Comparaison des méthodes de détection des couleurs dans OpenCV inRange, numpy, cupy
Somme de plusieurs tableaux numpy (somme)
À propos de tout numpy (2e)
Pourcentage de LIKE pour pymysql
Vue d'ensemble de Docker (pour les débutants)
Implémentation de Scale-Space pour SIFT
Sortie csv avec un nombre différent de chiffres pour chaque colonne avec numpy