我有1000个文件,通过使用Scipy,我可以获得每个文件的峰值,您可以在下面看到一个点模板:
[[4 29 73 111 130 140 167 231 248 267 284 298 320 333
379 404 1299 1311 1326 1337 1372 1409 1426 1437 1511 1549 1578 1591 1604 1646]]
获得峰坐标后,我想对这些点进行一个运算(算术运算),我需要确定两个连续点之间的距离,然后绘制结果。我写的代码在下面,但出现索引错误。
import numpy
import os
import matplotlib.pyplot as plt
import pandas as pd
from scipy.signal import find_peaks
Files = [f for f in sorted(os.listdir('.')) if f.startswith('config')]
plt.rcParams.update({'font.size': 14})
maxnum = np.max([int(os.path.splitext(f)[0].split('_')[1]) for f in Files])
FILES= ['configuration_%d.out' % i for i in range(maxnum)]
gg = []
my_l_h = []
for i, d in enumerate(FILES):
a = np.loadtxt(d).T
x = a[3]
peaks, _ = find_peaks(x, distance=10)
gg = [peaks]
L_h = np.array(gg)
for numbers in L_h:
jp = L_h[:,numbers]-L_h[:,numbers-1]
my_l_h.append(jp)
print(my_l_h)
t = np.arange(0,len(my_l_h)
plt.plot(t, my_l_h)
我得到的错误如下:
--------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-42-825708f0445f> in <module>
15 #print(L_h)
16 for numbers in L_h:
---> 17 jp = L_h[:,numbers]-L_h[:,numbers-1]
18 my_l_h.append(jp)
19 print(my_l_h)
IndexError: too many indices for array
似乎问题出在i
:
for i, d in enumerate(FILES):
...
L_h = ...
for numbers in L_h:
jp = L_h[:,i]-L_h[:,i-1]
...
因此,L_h大小与您不使用numbers
的情况之间没有任何联系。我猜应该是jp = L_h[:,numbers]-L_h[:,numbers-1]
之类的东西。同样奇怪的是,第一个循环的L_h
值没有被记住。当进入第二个循环时,最后一个文件只有L_h
。