我有一个t值列表。我找到最小值的代码如下:
for i in np.arange(0,499,1):
if t[i]<t[i-1] and t[i]<t[i+1] :
t_min.append(t[i])
我的t值每次都会发生变化,因此可能会发生一个最小值出现在开头或结尾的情况,在这种情况下,这个代码不起作用。所以我需要一个适用于任何t值范围的通用代码。
答案 0 :(得分:3)
您可以使用%运算符循环结束,并在迭代器的长度上添加一个。这会将您的数组视为一个圆圈,这就是您真正想要的。
t_min = []
for i in range(len(t)):
if t[i] < min(t[i - 1], t[(i + 1) % len(t)]):
t_min.append(t[i])
编辑:修复我所采用的值范围,以便第一个元素不会被检查两次,这要归功于@Jasper指出这一点
答案 1 :(得分:0)
我建议使用scipy.signal.argrelmin来查找所有本地最小值,而不是循环遍历数组。你可以选择最喜欢的两个。
<?php
$mailto = $_POST['mail_to'];
$mailSub = $_POST['mail_sub'];
$mailMsg = $_POST['mail_msg'];
require 'PHPMailer-master/PHPMailerAutoload.php';
$mail = new PHPMailer();
$mail ->IsSmtp();
$mail ->SMTPDebug = 2;
$mail ->SMTPAuth = true;
$mail ->SMTPSecure = 'ssl';
$mail ->Host = "smtp.gmail.com";
$mail ->Port = 465; /* or 587;*/
$mail ->IsHTML(true);
$mail ->Username = "xxxxx";
$mail ->Password = "xxxxx";
$mail ->SetFrom("xxxxx");
$mail ->Subject = $mailSub;
$mail ->Body = $mailMsg;
$mail ->AddAddress($mailto);
if(!$mail->Send())
{
echo "Mail Not Sent";
}
else
{
echo "Mail Sent";
}
?>
这会输出from scipy.signal import argrelmin
import numpy as np
t = np.sin(np.linspace(0, 4*np.pi, 500))
relmin = argrelmin(t)[0]
print(relmin)
。
要将数组视为环绕,请使用[187 437]
没有环绕,argrelmin不会将数组的开头和结尾识别为局部最小值的候选者。 (对“局部最小值”有不同的解释:一个允许端点,另一个不允许。)如果你希望在函数达到最小值时包含端点,那就这样做:
argrelmin(t, mode=‘wrap’)
现在输出为if t[0] < t[1]:
relmin = np.append(relmin, 0)
if t[-1] < t[-2]:
relmin = np.append(relmin, len(t)-1)
。