Numpy ndarray вещает после логического условия - PullRequest
0 голосов
/ 21 февраля 2019

Я хотел бы знать, есть ли способ использовать преимущества широковещательного массива Python, избегая использования цикла 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))
x_t_dot = np.cos(tau).reshape((n_t,1))
#
delta = np.maximum(0,(x_t-G))
f_dot = np.zeros((n_t,1))
# current used for loop 
for i  in range(0,n_t,1):
    # Boolean condition
    if delta[i,0] > 0:
        f_dot[i,0] = k_n

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

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

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

mask = delta>0
f_dot[mask] = k_n

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

0 голосов
/ 21 февраля 2019

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

f_dot = np.where(delta > 0, k_n, f_dot)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...