函数中的数组元素不能改变?

Array elements within a function aren't able to change?

import numpy as np
from scipy.signal import argrelextrema

a = np.array([0,2,4,2,0,2,3,2,3,2,0])

def raycrit(a,thresh):
    min_ind = argrelextrema(a, np.less)
    max_ind = argrelextrema(a, np.greater)
    maxima = a[max_ind]
    minima = a[min_ind]
    if min_ind[0][0] > max_ind[0][0]:
        for i in range(0,len(minima)):
            if maxima[i] > thresh and maxima[i+1] > thresh:
                if minima[i] > maxima[i]/2 and minima[i] > maxima[i+1]/2:
                    minima[i] = thresh 
    a[min_ind] = minima
    return a
        
b = raycrit(a,2.5)

在上面的代码摘录中,我试图找到被局部最大值包围的局部最小值,这些局部最大值的高度超过与其相邻的最高局部最大值的高度的一半。虽然这放入文本中可能会令人困惑,但我认为阅读代码有助于理解我想要达到的目的。问题出现的事实是 minima[i] = thresh 即使在触发条件时也保持不变。这里的结果应该是 [0,2,4,2,0,2,3,2.5,3,2,0] 但仍然是 [0,2,4,2,0,2,3,2,3,2 ,0] 我很困惑为什么...

这是一个 dtype 问题。您将 adtype 设置为 int32/64,当您尝试使用浮点数 (2.5) 进行更新时,它会将其更新为 2,这是它已经达到的价值。做 a = np.array(...., dtype=float) 来解决这个问题。