У меня есть одномерный массив '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()