Набор данных растяжения в python - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть набор данных t1, который я хотел бы растянуть. Как вы можете видеть ниже, он имеет длину 9. Могу ли я растянуть его до длины 30 без добавления значений заполнения. В идеале, свойство набора данных (например, как изменяются значения) должно быть максимально сохранено. Может ли кто-нибудь дать мне какую-нибудь подсказку / совет?

t1=[106.7, 106.7, 99.94, 95.83, 92.84, 90.44, 88.3, 86.12, 82.22, 77.2]
plt.plot(range(0,len(t1)), t1)
plt.legend()

enter image description here


Набор данных масштабирован с масштабированием: enter image description here


Я взял другой набор данных и пересчитал со средним значением:

t1= [144.8025, 144.3592, 143.6091, 142.5525, 141.1892, 139.5193, 137.5428, 135.2597, 132.6699, 129.7736, 126.5706, 123.061, 119.2447, 115.1218, 110.6924, 105.9563, 100.9135, 95.5642, 89.9082, 83.9456, 77.6764, 71.1005, 64.2181, 57.029, 49.5333, 41.7309, 33.622, 25.2064, 16.4842, 7.4554, 144.7695, 144.293, 143.5099, 142.4202, 141.0239, 139.3209, 137.3113, 134.9951, 132.3723, 129.4428, 126.2068, 122.6641, 118.8148, 114.6588, 110.1963, 105.4271, 100.3513, 94.9689, 89.2798, 83.2841, 76.9818, 70.3729, 63.4574, 56.2352, 48.7064, 40.871, 32.729, 24.2804, 15.5251, 6.4632, 141.1892, 139.5193, 137.5428, 135.2597, 132.6699, 129.7736, 126.5706, 123.061, 119.2447, 115.1218, 110.6924, 105.9563, 100.9135, 95.5642, 89.9082, 83.9456, 77.6764, 71.1005, 64.2181, 57.029, 49.5333, 41.7309, 33.622, 25.2064, 16.4842, 7.4554]

enter image description here


Выше график в отдельном участок с фиксированным размером plt.figure(figsize=(12, 6))

enter image description here enter image description here

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Звучит так, как будто вы хотите пересчитать массив.

Есть много способов сделать это, но мой любимый вариант - zoom из библиотеки scipy: https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.zoom.html

from scipy.ndimage.interpolation import zoom
import numpy as np

# original array:
x = np.array([106.7, 106.7, 99.94, 95.83, 92.84, 90.44, 88.3, 86.12, 82.22, 77.2])

# set resample ratio:
resample_ratio = 30 / len(x)

# resample array:
y = zoom(x, resample_ratio)
0 голосов
/ 07 февраля 2020

Я пытался получить ту же кривую, но растянуто для удовольствия, не используя модные библиотеки. В основном я делаю среднее значение для каждой пары очков, пока не достигну 30 элементов. Кстати, лучше использовать зум.

from matplotlib import pyplot as plt
from numpy import mean

def stretch(list_):
    i = 0
    while len(list_) < 30:
        if i == len(list_)-1:
            i = 0
        curr_new_point = mean([list_[i], list_[i+1]])
        list_ = list_[:i+1] + [curr_new_point] + list_[i+1:]
        i+=2
    return list_


t1=[106.7, 106.7, 99.94, 95.83, 92.84, 90.44, 88.3, 86.12, 82.22, 77.2]
plt.plot(range(0, len(t1)), t1)
plt.legend()
plt.show()

stretched = stretch(t1)
plt.plot(range(0, len(stretched)), stretched)
plt.legend()
plt.show()
...