Как преобразовать отрицательные элементы для обнуления без цикла?

Если у меня есть массив как

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)
  1. 1.38629984856
  2. 0.516846179962 <-быстрее a.clip (min=0);
  3. 0.615426063538
  4. 0.944557905197
  5. 51.7364809513
44
задан Ruggero Turra 22 November 2018 в 16:44
поделиться

3 ответа

a = a.clip(min=0)
84
ответ дан 26 November 2019 в 21:49
поделиться

Я бы сделал так:

a[a < 0] = 0

Если вы хотите сохранить оригинальный a и только установить отрицательные элементы в ноль в копии, вы можете сначала скопировать массив:

c = a.copy()
c[c < 0] = 0
14
ответ дан 26 November 2019 в 21:49
поделиться

Используйте где

a[numpy.where(a<0)] = 0
6
ответ дан 26 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: