Я понятия не имею, как объяснить эту концепцию, как если бы я это сделал, я, вероятно, уже нашел бы ответ в Google.
То, что я пытаюсь сделать, это взять список точек y и уменьшить все значения выше и ниже определенной выбранной точки. Может быть в середине графика, может быть в начале и т.д.
С картинкой проще. Вот визуализация того, что я хочу сделать.
Вы можете видеть точку, которую я выбрал для «уменьшения» точек вокруг нее.
Я написал эту чрезмерно сложную функцию, чтобы сделать именно это:
import numpy as np
x = [0.0, 4.8, 9.0, 11.3, 13.6, 17.1, 23.1, 29.5, 35.1, 39.8, 42.2]
y = [1.35, 1.36, 1.39, 1.43, 1.46, 1.48, 1.49, 1.53, 1.59, 1.68, 1.8]
squash_around = 1.43
squash_min = min([i-squash_around for i in y])
squash_max = max([i-squash_around for i in y])
y = [np.interp(i-squash_around, [squash_min, 0, squash_max], [.9, 1.0, 1.1])*i for i in y]
Однако он не работает правильно с некоторыми данными, например, я установил squash_around
на .2, поэтому он должен изменить все точки, кроме верхней левой, но это не так:
Если кто-нибудь может указать мне на вероятный дублирующий вопрос для этого, это было бы здорово.
Похоже, что вы пытаетесь «уменьшить» разницу в значении y между интересующей точкой (т.е. обведенной) и значением y каждой другой точки.
Если мы позволим (x, y)
быть точкой, которую вы хотите «уменьшить», тогда мы можем «уменьшить» другую точку (x1, y1)
относительно (x, y)
в a
раз с помощью следующего преобразования
(x1, y1) => (x1, y + (y1 - y) * a)
Если 0 < a < 1
, то (x, y)
остается точно там же, точки ниже y
движутся к нему вверх, а точки выше y
движутся к нему вниз. Ввод этого в код numpy
import numpy as np
x = np.array([0.0, 4.8, 9.0, 11.3, 13.6, 17.1, 23.1, 29.5, 35.1, 39.8, 42.2])
y = np.array([1.35, 1.36, 1.39, 1.43, 1.46, 1.48, 1.49, 1.53, 1.59, 1.68, 1.8])
i = 5 # the index of the point to "reduce" around
a = 0.5 # reduction factor
reduced = y[i] + (y - y[i]) * a
# plt.plot(x, y)
# plt.plot(x, reduced)
Это то сокращение, которое вы ищете?
Превосходно! Да, точно. Знал, что есть простой способ сделать это. Спасибо
Графики хороши, но было бы полезно, если бы вы могли опубликовать фактический числовой вывод из вашего кода, сопоставленный с результатом, который вы ожидаете в каждом случае.