为了账号安全,请及时绑定邮箱和手机立即绑定

根据布尔条件进行 Numpy ndarray 广播

根据布尔条件进行 Numpy ndarray 广播

jeck猫 2021-11-16 09:35:56
我想知道是否有一种方法可以通过避免使用 for 循环来减少计算时间来利用 python numpy 数组广播。这是以下最小示例:import numpy as np# parametersn_t = 256G = 0.5k_n = 10# typical datatau = 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任何建议将不胜感激。谢谢。
查看完整描述

2 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

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

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


查看完整回答
反对 回复 2021-11-16
?
波斯汪

TA贡献1811条经验 获得超4个赞

numpy.where正如@yatu 所指出的那样,这是一个很好的方法。为完整起见,逻辑屏蔽也是一种选择。其实切片numpy.array对象的方法有很多种!.

mask = delta>0
f_dot[mask] = k_n

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


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信