微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Argrelmin 不返回值

如何解决Argrelmin 不返回值

请问为什么 min_idxs 是空的?此代码适用于我的原始数据,当我更改曲线时会发生此问题,但在使用人工数据后,发生了同样的错误。非常感谢

import numpy as np  
import matplotlib.pyplot as plt
from scipy.signal import argrelmin

data = [[1,2,3,4,5],[0,1,0.1],[0.05,0.06,0.03,0.01]]

# distane between a point and the curve
def distance(x,y,x0,y0):
    d_x = x - x0
    d_y = y - y0
    dis = np.sqrt( d_x**2 + d_y**2 )
    return dis

z_1v1 = np.polyfit(data[0],data[1],2)
f_1v1 = np.poly1d(z_1v1)
# Creating more points on the streamline - defining new time with more steps
x_new = list(np.arange(1,5,0.1))
y_new = f_1v1(x_new)

fig,ax = plt.subplots(figsize=[12,8])

ax.errorbar(data[0],yerr=data[2],fmt='o')

plt.xlim(1,5)
ax.plot(x_new,y_new)

plt.show()

min_dis = []

for i in range(len(data[0])-1):
    dis = distance(np.array(x_new),np.array(y_new),data[0][i],data[1][i])
    # find the minima
    print(dis)
    min_idxs = argrelmin(np.array(dis))[0]   # <-----------------
    # take the minimum
    print(min_idxs)
    glob_min_idx = min_idxs[np.argmin(dis[min_idxs])]
    # coordinates and distance
    min_x = x_new[glob_min_idx]
    min_y = y_new[glob_min_idx]
    min_d = dis[glob_min_idx]
    min_dis.append(min_d)

根据建议编辑 我尝试了另一个函数,但得到了错误:min_x2 = x_data[glob_min_idx2] IndexError:列表索引超出范围 请问这有什么问题吗?为什么 glob_min_idx2 这么大?

import numpy as np  
from scipy.signal import argrelmin

# distance between a point and the curve
def distance(x,y0):
    d_x = x - x0
    d_y = y - y0
    dis = np.sqrt( d_x**2 + d_y**2 )
    return dis

x = np.arange(40000,53000,0.05)
a = 0.212559
b = 0.000609114
c = 4.2143e-06
y = a*np.sin(b*x) + c*x


min_dis2 = []

x_data = [50124.7613,50131.5144,50142.5124,50146.7476,50157.5567,50190.5148,50194.5244,50452.5951,50460.7548,50467.67,50471.7473,50515.6811,50526.2968,50533.4945,50540.4819,50544.4719,50551.4765,51183.8158,51190.7394,51197.511,51555.594,51570.8073,52278.7665,16481.7836,17577.7837,17905.9414,18996.8521,40607.7343,42075.791,42724.911,42886.626,43092.8355,43502.5255,43505.6196,43885.5637,43892.5748,44955.6822,45246.86,45354.813]
y_data = [0.1466,0.04017,0.06292,0.18241,0.01626,0.04861,-0.0575,0.09487,0.02313,0.0788,0.04038,0.07319,-0.28636,0.05181,0.17968,0.05397,0.19904,0.08967,0.15374,0.06581,0.08134,0.20368,0.25938,0.41974,0.26695,0.53911,-0.58736,0.03152,0.1488,0.35727,0.18736,0.61096,0.10106,0.45135,0.37749,0.52906,0.40931,-0.62887,0.31546]


for i in range(len(x_data)-1):
    dis2 = distance(np.array(x),np.array(y),x_data[i],y_data[i])
    # find the minima
    min_idxs2 = argrelmin(np.array(dis2))[0]
    # take the minimum
    if not min_idxs2.size:
        min_idxs2 = [np.argmin(dis2)]
    print(min_idxs2)
    glob_min_idx2 = min_idxs2[np.argmin(dis2[min_idxs2])]
    print(glob_min_idx2)
    # coordinates and distance
    print(len(x_data))
    min_x2 = x_data[glob_min_idx2]
    min_y2 = y_data[glob_min_idx2]
    min_d2 = dis2[glob_min_idx2]
    min_dis2.append(min_d2)


print(min_dis2)

解决方法

$tags = explode(",",$request->tag);//separate tags $tagsIds = []; foreach($tags as $tag) { array_push($tagsIds,Tag::create(['theTagColumn ex: name'=>$tag])->id); } $question->tags()->attach($tagsIds); argrelextremaargrelmax 可以找到局部/全局最大值和最小值,但如果它们是区间 (https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.argrelmin.html) 的极值,则不能。

在你的情况下,第一个 argrelmin 是单调递增的,所以局部最小值是全局最小值(在定义的间隔内),它是左极值。

您可以简单地添加一个 dis 语句

if

enter image description here

enter image description here

enter image description here

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。