如何让SciPy从y最大值返回x值?

时间:2019-02-28 14:51:50

标签: python scipy

我正在编写一个脚本来从csv中绘制图形(“列A”为“ x”,“列B”为“ y”),并以一个或多个“ y”最大值返回“ x”值。

我目前正在使用scipy find_peaks函数来查找最大值,但是对于如何返回“ x”值我有些困惑。目前,我可以在输入文件中输出“ y”值位置的数组,但随后我被卡住了。我对此很陌生,所以很抱歉,如果我以错误的方式处理了这个问题!

import matplotlib.pyplot as plt
import csv
from scipy.signal import find_peaks

x = []
y = []

with open('data.csv','r') as csvfile:
    plots = csv.reader(csvfile, delimiter=',')
    for row in plots:
        x.append(float(row[0]))
        y.append(float(row[1]))

plt.figure(figsize=(10,5))
plt.plot(x,y, marker=' ')

peaks = find_peaks(y, height=100,)
print(peaks)

我正在Spyder中运行它,下面的图像(链接)具有输出。关键部分是这样:

(array([14, 17, 30], dtype=int64), {'peak_heights': array([1000.,  700.,  300.])})

理想情况下,我想使用第一个数组中的数字从csv文件中查找“ x”值。这可能吗?

Output image

1 个答案:

答案 0 :(得分:0)

@PaulH的答案实现了我想做的事情。从上面的评论中包括他的解决方案,现在我将其作为脚本:

import matplotlib.pyplot as plt
import csv
from scipy.signal import find_peaks
import numpy

x = []
y = []

with open('data.csv','r') as csvfile:
    plots = csv.reader(csvfile, delimiter=',')
    for row in plots:
        x.append(float(row[0]))
        y.append(float(row[1]))

plt.figure(figsize=(10,5))
plt.plot(x,y, marker=' ')

peaks = find_peaks(y, height=100,)

### This section is from @PaulH ###

list = numpy.array(x)[peaks[0]]
print(list)

###################################

输出现在包括以下行:

[-1.5  -0.75  2.5 ]

在我的数据集中包含三个最大值的'x'值。

谢谢!