От понимания списка до numpy .where () - PullRequest
1 голос
/ 14 января 2020

У меня есть следующий код, который преобразует шумовую прямоугольную волну в бесшумную:

import numpy as np

threshold  = 0.5
low = 0
high = 1

time   = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
amplitude  = np.array([0.1, -0.2, 0.2, 1.1, 0.9, 0.8, 0.98, 0.2, 0.1, -0.1])

# using list comprehension
new_amplitude_1 = [low if a<threshold else high for a in amplitude]

print(new_amplitude_1)
# gives: [0, 0, 0, 1, 1, 1, 1, 0, 0, 0]

# using numpy's where
new_amplitude_2 = np.where(amplitude > threshold)

print(new_amplitude_2)
# gives: (array([3, 4, 5, 6]),)

Возможно использовать np.where () для получения идентичного результата для new_amplitude_2 в качестве Понимание списка (new_amplitude_1) в этом случае?

Я читаю некоторые учебники в Интернете, но не вижу логи c, чтобы иметь if else внутри np.where(). Может мне стоит использовать другую функцию?

Ответы [ 2 ]

5 голосов
/ 14 января 2020

Вот как вы можете сделать это, используя np.where:

np.where(amplitude < threshold, low, high)
# array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0])
4 голосов
/ 14 января 2020

Вы можете сделать это без:

new_ampl2 = (amplitude > 0.5).astype(np.int32)
print(new_ampl2)
Out[11]:
array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...