Преобразование одномерных массивов в формат сетки для создания двухмерного контурного графика: Python - PullRequest
0 голосов
/ 26 марта 2019

У меня есть одномерный массив 'x', представляющий треугольную волну с возрастающей амплитудой.Минимальное значение x всегда равно ~ '-3', а пиковое значение увеличивается с ростом индекса массива.В соответствии с каждым элементом «x» у меня есть другой список записей в зависимой переменной «y».

Сначала я копирую значения x между локальными минимумами и следующими локальными максимумами.Поскольку значение в локальных минимумах всегда одинаково (~ -3), я получаю один подмассив для одного локального максимума.Например, в коде «array3» является одним из таких подмассивов (см. Также график).

Теперь я хочу разделить переменную x на формат сетки в зависимости от локальных максимумов и соответствующих подмассивов.Затем я хочу отобразить значения y на сетке.То есть я хотел бы получить у (пиковое значение х, х).[массив3 имеет пиковое значение -2,8901.Поэтому я хочу получить y (-2.8901, array3) = сопоставленное значение].

Наконец, я хотел бы получить двумерную производную от y в этой плоскости сетки.Как я могу это сделать?

    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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...