np.interp () работает с необработанным списком, но не после применения к нему функции - PullRequest
1 голос
/ 27 февраля 2020

Если я использую код ниже

import numpy as np

xs = [5, 7.5, 10, 15, 30, 90, 270]
ys = [2, 5, 10, 15, 20, 30, 50]
PH = [200, 200, 200, 200, 200, 200, 200]
ys = [((x*100)/ph) for x,ph in zip(ys, PH)]
yData = [round(x,2) for x in ys]
xData = [1/x for x in xs]

xinterp = np.arange(min(xData), max(xData), 0.01)
yinterp = np.interp(xinterp, xData, yData)
print(xinterp) 
print(yinterp)

, я получаю:

[0.0037037 0.0137037 0.0237037 0.0337037 0.0437037 0.0537037 0.0637037
 0.0737037 0.0837037 0.0937037 0.1037037 0.1137037 0.1237037 0.1337037
 0.1437037 0.1537037 0.1637037 0.1737037 0.1837037 0.1937037]

[ 1. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25. 25.
 25. 25.]

Однако, если я использую прямые значения fox x и y:

import numpy as np

xData = [0.0037037, 0.0111, 0.0333, 0.0666, 0.1, 0.1333, 0.2]
yData = [2, 5, 10, 15, 20, 30, 50]

xinterp = np.arange(min(xData), max(xData), 0.01)
yinterp = np.interp(xinterp, xData, yData)
print(xinterp) 
print(yinterp)

Я получаю ожидаемые значения:

[0.0037037 0.0137037 0.0237037 0.0337037 0.0437037 0.0537037 0.0637037
 0.0737037 0.0837037 0.0937037 0.1037037 0.1137037 0.1237037 0.1337037
 0.1437037 0.1537037 0.1637037 0.1737037 0.1837037 0.1937037]

[ 2.          5.58641892  7.83867117 10.06061562 11.56211712 13.06361862
 14.56512012 16.06342814 17.56043413 19.05744012 21.11222222 24.11522523
 27.11822823 30.12104948 33.11955022 36.11805097 39.11655172 42.11505247
 45.11355322 48.11205397]

Я не совсем понимаю разницу между необработанными данными и данными, взятыми непосредственно из списка, может ли кто-нибудь мне помочь?

1 Ответ

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

Вы на самом деле делаете разные интерполяции!
В первом примере вы интерполируете для:

xData = [0.2, 0.13333333333333333, 0.1, 0.06666666666666667, 0.03333333333333333, 0.011111111111111112, 0.003703703703703704]
yData = [1.0, 2.5, 5.0, 7.5, 10.0, 15.0, 25.0]

, но во втором примере вы интерполируете для:

xData = [0.0037037, 0.0111, 0.0333, 0.0666, 0.1, 0.1333, 0.2]
yData = [2, 5, 10, 15, 20, 30, 50]

Я думаю, что вы хотите сделать первое Пример для вывода такой же, как во втором примере, верно? Если это так, попробуйте добавить это в первый пример:

xData.sort()
yData = np.array(yData) * 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...