布尔条件后的Numpy ndarray广播

时间:2019-02-21 20:42:51

标签: python numpy numpy-broadcasting

我想知道是否有一种通过避免使用for循环来减少计算时间的方法来利用python numpy数组广播。这是下面的最小示例:

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 :(得分:2)

您可以使用np.where来根据条件的结果从k_nf_dot分配值:

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

答案 1 :(得分:1)

正如@yatu所指出的,

numpy.where是一个不错的选择。为了完整性,逻辑屏蔽也是一个选项。 In fact, there are many ways to slice an numpy.array object!

mask = delta>0
f_dot[mask] = k_n

请注意,如果掩码是一次性的,则也可以减少为一行:f_dot[delta>0] = k_n