數據分析基本工具-NumPy

Python是個非常易理解與學習的語言(不過本主題不會做太多的介紹…),其中很大的一個優點是有非常多的第三方套件,可幫助開發者提升專案開發效率(可參考:https://pypi.org/)。

至於在資料科學的專案中,我們時常使用到的套件模組是Seaborn、Pandas、Matplotlib等,往後的文章中也會陸續再向讀者做介紹,本篇文章會將重點鎖定於Numpy!使用到的程式碼也會放在Github上,歡迎取用~

介紹NumPy

NumPy(Numerical Python),是高性能計算和資料分析的基本套件,包含6大特色:提供高效能的N維度陣列運算、具備全面的數學運算功能、許多的硬體和運算平台皆可搭配使用、入門門檻低且操作直觀、可與其他程式語言做整合(EX:C、C++等)、為Open Source可公開開發和維護的。(可參考:https://numpy.org/)

證明NumPy具有高效能?

以下段落帶大家了解list及ndarray的資料型態差別。

首先,是運算效能上的差異。上方的程式碼圖片是將list(a)資料型態及ndarray(b)的資料型態同做相同的運算(先創建資料長度為100000000的list及ndarray,並各自將資料內容加總),可發現list的運算效率遠為ndarray的將近八倍,list所花費的時間約為570ms,而ndarray只花了約為74ms的時間。

機器學習或是深度學習最大的特點就是會進行複雜且大量的運算,因此不論資料的大小及維度,ndarray都可以為我們省去許多不必要的等待時間或是機器上的效能問題。

另外,ndarray 除了運算效能比 list 快上很多之外,其實是有一個限制的,而這也是 list 的優勢。就是儲存在同一個 ndarray 裡的資料都要是同樣的資料型別。反之,list則不需要。

語法說明

安裝套件

引入套件

查看資訊

參考自 http://taewan.kim/post/numpy_cheat_sheet/

建立陣列

以下圖表為ndarray所支持的所有資料型態整理表。

參考自https://medium.com/python4u/hello-numpy-b5ebe67a1ada

陣列的索引、維度轉換及排序

陣列的合併

運算及統計

💡因 np.dot() 的用法筆者認為較為特殊,特別拉出來和大家做介紹~

矩陣運算方式

若兩矩陣(x, y)需進行內積運算,x為m×n階矩陣,y就必須為n×p階矩陣,算出的結果則會為m×p階矩陣,不符合此規定的話則無法運算。

參考自https://mathinsight.org/matrix_vector_multiplication

如上圖所示,A矩陣為2×3階矩陣,B為3×2階矩陣,因此算出的結果為2×2階矩陣。

上圖的程式碼中,x與y矩陣同樣都為2×3階矩陣,因此不符合規定,無法做運算則報錯。

特殊情況

array([1, 2, 3]) 看似是1×3階的矩陣,但其實他的shape卻是(3, ) 。

因此若x矩陣為3×3階矩陣,y為3×?階矩陣,是可以做運算的。

反之,若x矩陣為3×1階矩陣,y為3×?階矩陣,也一樣會報錯無法做運算。

根據上述所論,若讀者想要的shape是1×3矩陣的話,比較安全的打法會是
array([[1, 2, 3]])

不過,若將上述的情況顛倒過來,np.dot()又會自動先轉置後再做運算。例如:x為3×?階矩陣,y矩陣為3×1階矩陣。直觀想法應該要報錯,但np.dot()先將x矩陣轉換了,可以想像成x是?×3階而y仍然是3×1階,因此還是可以做運算。

以上為np.dot() 中較容易搞混的內容,透過補充的方式帶大家釐清。

總結

NumPy是非常強大的Python套件,也具有非常多的功能,筆者在此只是簡單的敘述幾個基本且較常用的功能,還是希望可以幫助到大家~

參考資料

Numpy的介绍和优势_IT之一小佬的博客-CSDN博客_numpy的优势
Numpy的介绍和优势1 Numpy介绍Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。2 ndarray介绍NumPy provides an N-dimensional array type, the ndarray,

本文授權轉載自數據領航員 / 原文刊登於:數據分析基本工具-NumPy