畫圖必備numpy函數


給定一堆數字,需要統計這些數字中每個數字的個數。 如果這些數字是整數,那自然可以精確統計出來。 如果這些數字是浮點數,如果精確統計會發現幾乎每個數字都只出現了一次。所以浮點數就要通過區間的方式進行統計。

一、使用collections.Counter

from collections import Counter

import numpy as np
import pylab as plt

a = np.random.randint(0, 10, (100))
c = Counter(a)
x = c.keys()
y = c.values()
plt.plot(x, y, linewidth=5, label="counter")
cnt = np.bincount(a)
plt.plot(range(len(cnt)), cnt, label="numpy")
plt.legend()
plt.show()

二、使用np.bincount

統計整數的出現次數,默認每個整數出現一次就算一次,可以通過weights參數指定每個整數的出現次數。 函數原型:numpy.bincount(x, weights=None, minlength=0) weights表示各個數字的權重,長度和x一致。

import numpy as np

a = np.array([1, 2, 5, 7, 2])
print(np.bincount(a)) #[0 1 2 0 0 1 0 1]
print(np.bincount(a, [0.1, 0.2, 0.5, 0.7, 0.2])) #[0.  0.1 0.4 0.  0.  0.5 0.  0.7]

三、使用np.histogram

使用若干個區間統計浮點數出現次數。 values,edges=numpy.histogram(a, bins=10, range=None, normed=False, weights=None, density=None) 返回的edges和values都是一維數組,edges的長度比values大一個,表示len(values)個間隔。

  • a:一個數組,如果是多維會被當做一維數組
  • bins:如果是一個int,表示把區間[min,max]均分為bins份;如果是一個數組,表示手動指定各個bins
  • range:如果bins是一個int,使用range指定柱狀圖的區間
  • weights:可以為每個元素設定權重,默認每個元素權重為1
  • normed:已廢棄
  • density:bool值

返回值: values就是縱軸,是一個一維數組,表示每個柱子內元素的個數 edges就是橫軸,是一個一維數組,它的長度比values多一維

四、使用np.interp實現插值

y=numpy.interp(x, xp, fp, left=None, right=None, period=None)

  • x:一個數組,表示要取哪些地方的插值結果
  • xp、fp:x坐標和y坐標
  • left、right、period:基本用不上,不必知道

返回值:y插值之后的結果,它的長度和x一樣。 使用此函數可以只繪制一部分坐標而不用全不繪制。matplotlib內部自動會調用插值函數合理繪制圖像,無需手動通過numpy調用,但當向前端傳遞數據讓js完成繪制時,就需要手動調用numpy來進行插值。

實際上,matplotlib這個庫在可視化數據時已經為我們做好了這些工作,如插值等,直接用matplotlib是不需要使用以上函數的。有時,需要將繪圖數據從后端傳到前端用HTML進行展示,這就需要壓縮一下數據,只把展示的數據傳送過來即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM