Трансляция Numpy ndarray после логического условия

Я хотел бы знать, есть ли способ воспользоваться преимуществами трансляции массива python numpy, избегая использования цикла for, чтобы сократить время вычислений. Вот следующий минимальный пример:

import numpy as np

# parameters
n_t = 256
G = 0.5
k_n = 10

# typical data
tau = np.linspace(0,2*np.pi,256)
x_t = np.sin(tau).reshape((n_t,1))

delta = np.maximum(0,(x_t-G))
f_dot = np.zeros((n_t,1))

for i  in range(0,n_t,1):
    # boolean condition
    if delta[i,0] > 0:
        f_dot[i,0] = k_n

Любые предложения будут ценны. Спасибо.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
266
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать np.where для присвоения значений из k_n или f_dot в соответствии с результатом условия:

f_dot = np.where(delta > 0, k_n, f_dot)

Спасибо, это было именно то, что я искал!

Yacola 21.02.2019 21:51

numpy.where - это хороший способ, как указал @yatu. Для полноты можно также использовать логическое маскирование. На самом деле, есть много способов нарезать объект numpy.array!.

mask = delta>0
f_dot[mask] = k_n

Обратите внимание, что это также может быть сокращено до одной строки, если маска одноразовая: f_dot[delta>0] = k_n.

Спасибо также за этот совет, я нахожу ваш ответ действительно интуитивным!

Yacola 21.02.2019 22:02

Другие вопросы по теме