Skip to main content
 首页 » 编程设计

python之numpy 切片赋值

2025年05月04日14mfryf

我正在寻找一种高效而优雅的方法来做到这一点。我希望这个例子能解释我的担忧。

我们有一个像这样的 np.array:

omega = np.array([1.03415121504, 1.29595060284, 1.55774999064, 1.81954937844, 
                  ... 
                  2.08134876623, 2.37359445321, -2.11179506541, -1.84999567761]) 

现在我想操纵它,比如

omega[omega < 0.0] = omega + 2 * np.pi 
omega[omega >= 2 * np.pi] = omega - 2 * np.pi 

第二个语句可能会覆盖第一个语句的计算值,然后有一个交集。我找到了 np.piecewise,但这并没有提供这样的行为。

我怎样才能做到这一点(高效)?

正确的行为就是这样(但非常低效/不优雅):

tmp = [] 
for o in omega: 
    if o < 0.0: 
        tmp.append(o + 2 * np.pi) 
    elif o >= (2 * np.pi): 
        tmp.append(o - 2 * np.pi) 
    else: 
        tmp.append(o) 
omega = np.array(tmp) 

因此有人为此目的使用 numpy 的 nditer 进行了体验? (特别是关于性能/效率)

请您参考如下方法:

您可以尝试使用 np.select: http://docs.scipy.org/doc/numpy/reference/generated/numpy.select.html

condlist = [omega < 0.0, omega >= 2.0*np.pi] 
choicelist = [omega + 2.0*np.pi, omega - 2.0*np.pi] 
omega = np.select(condlist,choicelist,default=omega)