天天看點

python繪制函數曲線

之前一直使用matlab來畫曲線,确實非常友善,但matlab作為商業軟體,價格很貴,動辄好幾個GB,安裝很慢,并且還涉及license問題。

相對來說,python完全免費,隻需要安裝一個解釋器,并且有很多科學計算庫可以調用,是以後來就一直使用python來畫曲線,記錄下最近畫的幾條曲線。

環境:mac、pycharm、anaconda

1.sigmoid曲線

sigmoid曲線公式如下,可将值域限定在(0,1),在深度學習目标分類檢測中常常用到,可限定坐标範圍、分類機率。

python繪制函數曲線

使用如下python代碼可以輕松畫出sigmoid曲線,直接看代碼,就不解釋了。

import numpy as np
import math
import matplotlib.pyplot as plt
x = np.arange(-10, 10, 0.1)
y = []
for t in x:
    y_1 = 1 / (1 + math.exp(-t))
    y.append(y_1)
plt.plot(x, y, label="sigmoid")
plt.xlabel("x")
plt.ylabel("y")
plt.ylim(0, 1)
plt.legend()
plt.show()
           
python繪制函數曲線

2.sin & cos曲線

import numpy as np
import math
import matplotlib.pyplot as plt
#sin & cos曲線
x = np.arange(0, 6, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x,y1,label="sin")
plt.plot(x,y2,label="cos",linestyle = "--")
plt.xlabel("x")
plt.ylabel("y")
plt.title('sin & cos')
plt.legend()   #打上标簽
plt.show()
           
python繪制函數曲線

3.lanczos曲線

lanczos曲線常常用在圖像插值中,這個算法在放大和縮小中都能較好的抵制鋸齒,在插值時,不僅有正的插值系數,也有負的系數,比較适用于自然圖像。

python繪制函數曲線
import numpy as np
import math
import matplotlib.pyplot as plt
#lanczos曲線
x = np.arange(-6, 6, 0.1)
a1 = 2
a2 = 3
a3 = 5
y1 = np.sinc(x) * np.sinc(x/a1)
y2 = np.sinc(x) * np.sinc(x/a2)
y3 = np.sinc(x) * np.sinc(x/a3)
plt.plot(x,y1,label="a=2")
plt.plot(x,y2,label="a=3",linestyle="--")
#plt.plot(x,y3,label="a=5",linestyle="--")
plt.title('sinc')
plt.legend()   #打上标簽
plt.show()
           
python繪制函數曲線

4.jpeg編碼的qp曲線

jpeg的quality參數對應DCT變換的量化程度,quality(0-100)值越高,表示量化損失越小,編碼品質越好。

import numpy as np
import math
import matplotlib.pyplot as plt
#jpeg編碼的qp曲線
x = np.arange(0.1, 100, 0.1)        #從0.1到100,間隔0.1取點
y = []
for t in x:
    if t < 50:
        y_1 = 5000 / t
    else:
        y_1 = 200 - t * 2
    y.append(y_1)
plt.plot(x, y, label="qp-quality")
plt.xlabel("quality")
plt.ylabel("qp")
plt.ylim(0, 500)
plt.legend()    #顯示label
plt.show()
           
python繪制函數曲線

上圖中的縱坐标表示基于标準量化表的系數,也就是下面代碼中的scale_factor,最終得到的temp值即為quality對應的量化表。

for (i = 0; i < DCTSIZE2; i++) {
    temp = ((long)basic_table[i] * scale_factor + 50L) / 100L;
    /* limit the values to the valid range */
    if (temp <= 0L) temp = 1L;
    if (temp > 32767L) temp = 32767L; /* max quantizer needed for 12 bits */
    if (force_baseline && temp > 255L)
      temp = 255L;              /* limit to baseline range if requested */
    (*qtblptr)->quantval[i] = (UINT16)temp;
  }
           

參考

[1] https://github.com/libjpeg-turbo/libjpeg-turbo