【问题标题】:Array elements within a function aren't able to change?函数中的数组元素不能改变?
【发布时间】:2021-08-19 21:32:59
【问题描述】:
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] 我很困惑为什么......

【问题讨论】:

    标签: python function indices


    【解决方案1】:

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

    【讨论】:

    • 是的,就是这样!这解决了我的问题,我怀疑我自己会想出解决方案 - 谢谢。
    猜你喜欢
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多