列表数学运算的列表

问题描述 投票:0回答:1

我有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

python numpy matplotlib
1个回答
0
投票

似乎问题出在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

© www.soinside.com 2019 - 2024. All rights reserved.