将一维数组转换为网格格式以生成二维轮廓图:Python

时间:2019-03-26 18:04:43

标签: python matrix multidimensional-array

我有一个一维数组'x',它表示振幅增加的三角波。 x的最小值始终为〜'-3',并且峰值随着数组索引的增加而增加。与“ x”的每个元素相对应,我在因变量“ y”中还有另一个条目列表。

首先,我在局部最小值和下一个局部最大值之间复制x的值。由于局部最小值中的值始终相同(〜-3),因此我得到了一个局部最大值的子数组。例如,在代码中,“ array3”是此类子数组之一(也请参见图)。

现在,我想根据局部最大值和相应的子数组将x变量拆分为meshgrid格式。然后我想将y的值映射到网格上。也就是说,我想得到y(x,x的峰值)。 [array3的峰值为-2.8901。所以我想得到y(-2.8901,array3)=映射值]。

最后,我想在此网格网格平面中获得y的2D导数。我该怎么办?

    import numpy as np
    import random
    from scipy.signal import argrelextrema
    import matplotlib.pyplot as plt

    x=np.array([-2.8,-2.99  , -2.9501, -2.9899, -2.95  , -2.9299, -2.99  , -2.95  ,
   -2.8901, -2.9299, -2.99  , -2.95  , -2.89  , -2.8699, -2.93  ,
   -2.99  , -2.9501, -2.89  , -2.8301, -2.87  , -2.93  , -2.9899,
   -2.95  , -2.8901, -2.8301, -2.81  , -2.87  , -2.9299, -2.9899,
   -2.95  , -2.8901, -2.8301, -2.77  , -2.8099, -2.8699, -2.93  ,
   -2.99  , -2.9501, -2.89  , -2.83  , -2.7701, -2.7499])


    y = [random.random() for i in range(len(x))]

    min_ind=argrelextrema(x, np.less, axis=0, order=1, mode='clip')[0]
    max_ind=argrelextrema(x, np.greater, axis=0, order=1, mode='clip')[0]


    array3=x[min_ind[2]:max_ind[2]+1]


    temp= list(range(0, len(x)))
    plt.plot(temp,x,'b.-')
    plt.plot(temp[min_ind[2]:max_ind[2]+1],array3,'r.-')
    plt.show()

0 个答案:

没有答案