Как уменьшить точки в списке вокруг определенной точки?

Я понятия не имею, как объяснить эту концепцию, как если бы я это сделал, я, вероятно, уже нашел бы ответ в 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, поэтому он должен изменить все точки, кроме верхней левой, но это не так:

Как уменьшить точки в списке вокруг определенной точки?

Если кто-нибудь может указать мне на вероятный дублирующий вопрос для этого, это было бы здорово.

Графики хороши, но было бы полезно, если бы вы могли опубликовать фактический числовой вывод из вашего кода, сопоставленный с результатом, который вы ожидаете в каждом случае.

CryptoFool 28.05.2019 04:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
216
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, что вы пытаетесь «уменьшить» разницу в значении 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)

Это то сокращение, которое вы ищете?

Превосходно! Да, точно. Знал, что есть простой способ сделать это. Спасибо

Shane Smiskol 28.05.2019 06:28

Другие вопросы по теме