天天看點

厲害了,numpy!!!

作者:不秃頭程式員
厲害了,numpy!!!

幾乎所有使用Python處理分析資料的人都用過Pandas,因為實在太友善了,就像Excel一樣,但你知道Pandas是基于Numpy開發出來的嗎?

Pandas和Numpy的關系類似于國産安卓系統和原生安卓,Numpy提供底層資料結構和算法,搭配資料面闆的分析模式,締造了Pandas。

某種意義上來說,Numpy是Python資料科學領域金字塔尖的庫。

有人這樣問過。

厲害了,numpy!!!

這并不讓人意外,雖然Numpy沒有Pandas知名度高,但Numpy的性能之強大、應用之廣會讓很多人咋舌,甚至Numpy的論文登上了Nature雜志。

厲害了,numpy!!!
閱讀和下載下傳位址:https://www.nature.com/articles/s41586-020-2649-2

不清楚底細的人可能會問,到底什麼是Numpy?

Numpy是專門用于多元數組和矩陣計算的Python庫,Numpy的強大不在于有多少函數方法,而在于其多元數組和矩陣的計算能力和運作效率。

厲害了,numpy!!!

衆所周知的商業軟體matlab,也是基于多元數組和矩陣計算。

多元數組和矩陣計算最主要的特點是快,非常快。

知道線性代數吧,為了提高性能,有專門的線性代數庫(如BLAS、LAPACK、Intel MKL等)對底層的矩陣運算進行了高度優化。

另外,CPU、GPU這些硬體對矩陣運算有很好的支援。

比如說,GPU具有大量的并行處理核心,非常适合執行大規模的矩陣運算。通過使用CUDA或OpenCL等技術,可以充分發揮GPU的并行計算能力。

厲害了,numpy!!!

在Numpy建立和使用多元數組很簡單,使用array方法即可。

厲害了,numpy!!!

除了多元數組和矩陣計算,從Numpy本身來說,它以下4大特點確定了它的重要地位:

1、可以和Pandas等多種庫進行互動

2、擁有各種科學計算API,任你調用

3、Numpy基于C語言開發,速度和C一樣快

4、Numpy在Python中使用,操作和Python一樣簡潔

接下來,我們看看有哪些Python庫的底層依賴庫是numpy。

依賴代表這些庫需要numpy支援才能運作,某種意義上來說,某個庫作為依賴庫越多代表它越重要。

以numpy作為依賴的部分python庫:

  1. Pandas:最出名的資料處理和分析庫,使用基于NumPy 的二維數組來分析資料。
厲害了,numpy!!!
  1. SciPy:類似于Matlab的數學和工程計算庫,SciPy 庫建立在 NumPy 之上,使用多元數組來計算。
  2. Matplotlib:Python中功能最齊全的可視化庫,也是很多其他可視化庫的依賴,它依賴 NumPy 進行數學運算以生成圖形。
  3. Scikit-learn:擁有各類算法的機器學習庫,使用 NumPy 進行資料的快速處理和算法實作。
  4. StatsModels:專門用于統計分析的算法庫,依賴 NumPy 進行數值計算。
  5. TensorFlow 和 PyTorch:最最出名的兩個深度學習架構,各種大模型都是靠它們跑出來的,但是它們在底層使用 NumPy 進行張量操作。
厲害了,numpy!!!
  1. OpenCV:家喻戶曉的計算機視覺,使用 NumPy 數組進行圖像處理。
  2. NetworkX:圖形網絡分析庫,用于複雜網絡建立、操作和使用 ,使用NumPy 進行網絡分析。

可以看到,很多主流的資料科學、機器學習、深度學習庫都是靠numpy依賴,基于多元數組來進行計算,可見numpy有多麼的重要,說它是資料科學的頂級庫也不為過。

以下是一些numpy的基礎函數和方法介紹:

  1. np.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0):
  • 建立一個 NumPy 數組。
  1. np.zeros(shape, dtype=float, order='C'):
  • 傳回一個給定形狀和資料類型的數組,其中所有元素都為 0。
  1. np.ones(shape, dtype=None, order='C'):
  • 傳回一個給定形狀和資料類型的數組,其中所有元素都為 1。
  1. np.empty(shape, dtype=float, order='C'):
  • 傳回一個未初始化的數組,其元素值是随機的。
  1. np.arange(start, stop=None, step=1, dtype=None):
  • 傳回一個與 Python 的 range 類似的數組,包含從 start 開始到 stop 結束(不包括 stop)的值,步長為 step。
  1. np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0):
  • 傳回一個數組,其中包含 num 個從 start 到 stop 的等間隔的點。
  1. np.reshape(a, newshape, order='C'):
  • 将數組 a 重塑為 newshape 指定的形狀。
  1. np.transpose(a, axes=None):
  • 轉置數組,可選地按照 axes 指定的軸順序。
  1. np.dot(a, b, out=None):
  • 矩陣乘法,計算兩個數組的點積。
  1. np.vstack(tup):
  • 垂直堆疊數組,等價于 np.concatenate(tup, axis=0)。