Python 遵循布尔条件的Numpy-ndarray广播

Python 遵循布尔条件的Numpy-ndarray广播,python,numpy,array-broadcasting,Python,Numpy,Array Broadcasting,我想知道是否有一种方法可以利用pythonnumpy数组广播,避免使用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

我想知道是否有一种方法可以利用pythonnumpy数组广播,避免使用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
如有任何建议,将不胜感激。谢谢。

您可以使用,以便根据条件的结果从
k\u n
f\u dot
分配值:

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

numpy。正如@yatu所指出的,
是一个很好的方法。为了完整性,逻辑屏蔽也是一个选项


注意如果面具是一次性的,这也可以减少到一行:
f_dot[delta>0]=k_n

谢谢,这正是我想要的!也谢谢你的建议,我觉得你的答案很直观!
mask = delta>0
f_dot[mask] = k_n