Если у меня есть массив как
a = np.array([2, 3, -1, -4, 3])
Я хочу обнулить все отрицательные элементы: [2, 3, 0, 0, 3]
. Как сделать это с numpy без явного для? Я должен использовать измененный a
в вычислении, например
c = a * b
где b
другой массив с той же длиной оригинала a
import numpy as np
from time import time
a = np.random.uniform(-1, 1, 20000000)
t = time(); b = np.where(a>0, a, 0); print ("1. ", time() - t)
a = np.random.uniform(-1, 1, 20000000)
t = time(); b = a.clip(min=0); print ("2. ", time() - t)
a = np.random.uniform(-1, 1, 20000000)
t = time(); a[a < 0] = 0; print ("3. ", time() - t)
a = np.random.uniform(-1, 1, 20000000)
t = time(); a[np.where(a<0)] = 0; print ("4. ", time() - t)
a = np.random.uniform(-1, 1, 20000000)
t = time(); b = [max(x, 0) for x in a]; print ("5. ", time() - t)
Я бы сделал так:
a[a < 0] = 0
Если вы хотите сохранить оригинальный a
и только установить отрицательные элементы в ноль в копии, вы можете сначала скопировать массив:
c = a.copy()
c[c < 0] = 0