猿问

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

我想知道是否有一种方法可以通过避免使用 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))


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

任何建议将不胜感激。谢谢。


jeck猫
浏览 170回答 2
2回答

至尊宝的传说

您可以使用np.where为了从任一条件k_n或f_dot根据条件的结果分配值:f_dot = np.where(delta > 0, k_n, f_dot)

波斯汪

numpy.where正如@yatu 所指出的那样,这是一个很好的方法。为完整起见,逻辑屏蔽也是一种选择。其实切片numpy.array对象的方法有很多种!.mask = delta>0 f_dot[mask] = k_n请注意,如果掩码是一次性的,这也可以减少到一行:f_dot[delta>0] = k_n。
随时随地看视频慕课网APP

相关分类

Python
我要回答