Data Science | Numpy基礎(一)
什麼是Numpy?
Numpy是Python開源的科學計算工具包,是高階的數值程式設計工具
強大的N維陣列物件:ndarray
可以對陣列結構資料進行運算(不用遍歷迴圈)
有隨機數、線性代數、傅立葉變換等功能
如何安裝?
安裝anaconda科學計算環境
鹹魚也是從新手一步一坑踩過來,深知新手配置環境的不易,所以這裡推薦使用anaconda,裡面整合了許多常用的庫,並且在配置環境時更容易上手。
下載地址:
具體安裝步驟,這裡不再贅述,不懂的朋友可以在交流群中討論,也可以參考下面的博文:
https://cuiqingcai.com/5059.html
安裝Numpy
方法一:安裝anaconda後,numpy是可以直接使用的,無需二次安裝。
方法二:沒有安裝anaconda可以使用pip install numpy
安裝。
安裝jupyter notebooks(推薦使用)
方法一:安裝anaconda後,jupyter notebooks是可以直接使用的,無需二次安裝。
方法二:沒有安裝anaconda可以使用pip install jupyter
安裝。
Numpy基礎資料結構
匯入
推薦使用from numpy import np
不建議使用from numpy import *
, 因為numpy中包含了大量與Python內建函式重名的函式。
生成ndarray
可以使用array生成陣列
舉個例子:
import numpy as np
ar = np.array([[1,2,3,4],[1,2,3,4]])
print(ar, type(ar))
>>>
[[1 2 3 4]
[1 2 3 4]] <class 'numpy.ndarray'>
除了np.array之外還有其他函式可以建立新陣列,這裡列出常用的幾個:
arange # python range的陣列版
asarray # 將輸入轉換為ndarray
ones # 根據給定的形狀和型別生成全1的陣列
ones_like # 根據給定的陣列生成形狀一樣的全1的陣列
zeros # 根據給定的形狀和型別生成全0的陣列
zeros_like # 根據給定的陣列生成形狀一樣的全1的陣列
eye # 生成一個N*N的特徵矩陣(對角線為1,其餘為0)
linspance # 返回在間隔[開始,停止]上計算的num個均勻間隔的樣本
這裡以zeros,zeros_like以及linspance分別舉例:
arr = np.zeros((3,5))
print(arr)
>>>
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
s = np.array([list(range(10)),list(range(10,20))])
print(s)
print(np.zeros_like(s))
>>>
[[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]]
[[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]]
print(np.linspace(10,20,num = 21)) #在10,21之間生成
print(np.linspace(10,20,num = 21, endpoint = False)) #endpoint預設為True,為False時不包含左邊的值
print(np.linspace(10,20,num = 21, retstep = True))# restep顯示步長
>>>
[10. 10.5 11. 11.5 12. 12.5 13. 13.5 14. 14.5 15. 15.5 16. 16.5
17. 17.5 18. 18.5 19. 19.5 20. ]
[10. 10.47619048 10.95238095 11.42857143 11.9047619 12.38095238
12.85714286 13.33333333 13.80952381 14.28571429 14.76190476 15.23809524
15.71428571 16.19047619 16.66666667 17.14285714 17.61904762 18.0952381
18.57142857 19.04761905 19.52380952]
(array([10. , 10.5, 11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5, 15. ,
15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5, 20. ]), 0.5)
這裡除了常用的幾個生成陣列的函式外,列舉一些常用的方法:
import numpy as np
ar = np.array([[1,2,3,4],[1,2,3,4]])
print(ar, type(ar))
print(ar.ndim)#返回陣列的維度的個數
print(ar.shape)#陣列的維度,返回幾行幾列
print(ar.size)#陣列元素的個數
print(ar.dtype)#元素的型別
print(ar.itemsize)#陣列中元素的大小
>>>
[[1 2 3 4]
[1 2 3 4]] <class 'numpy.ndarray'>
2
(2, 4)
8
int64
8
Numpy通用函式
陣列形狀變換(.T/.reshape()/.resize())
.T是轉置函式,轉置函式對一維陣列無影響
# .T
import numpy as np
ar1 = np.arange(10)
ar2 = np.zeros((2,5))
print(ar1.T)
print(ar2.T)#轉置函式
>>>
[0 1 2 3 4 5 6 7 8 9]
[[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]]
.reshape(),直接更改陣列的形狀,但更改前後陣列元素個數必須相同
ar1 = np.arange(10)
print(ar1.reshape(2,5))
print(np.reshape(np.arange(16),(2,8)))
>>>
[[0 1 2 3 4]
[5 6 7 8 9]]
[[ 0 1 2 3 4 5 6 7]
[ 8 9 10 11 12 13 14 15]]
.resize()
print(np.resize(np.arange(16),(3,5))) # resize當後面的陣列元素個數小於前面生成的數量時,按照順序迭代
print(np.resize(np.arange(12),(3,5))) # resize當後面的陣列元素個數大於前面的生成的數量,則隨機填充
>>>
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 0 1 2]]
陣列的複製
和python中的深淺複製類似:Python | Python學習之深淺複製
陣列的型別轉化
.astype()可以將陣列中元素的型別進行轉化,在numpy中元素型別有以下幾種(太多了就不都寫了):
int8, uint8 #有符號和無符號的8整位整數
int16, uint16 #有符號和無符號的16整位整數
int32, uint32 #有符號和無符號的32整位整數
int64, uint64 #有符號和無符號的64整位整數
float16 #半精度
float32 #單精度
float64 #雙精度
bool #布林
.....
舉個型別轉換的栗子:
ar1 = np.arange(10,dtype=float)
ar2 = ar1.astype(np.int64)
print(ar1,ar2)
>>>
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] [0 1 2 3 4 5 6 7 8 9]
陣列的堆疊
陣列的堆疊有hstack(),vstack()以及stack(),下面分別舉例:
a = np.arange(10)
b = np.arange(10,20)
print(ar1,ar2)
# 橫向連結
print(np.hstack((a,b)))
# 豎向連結
a = np.array([[1],[2],[3]])
b = np.array([['a'],['b'],['c']])
print(np.vstack((a,b)))
# 任意堆疊
a = np.arange(10)
b = np.arange(10,20)
print(np.stack((a,b),axis=1)) # 豎向堆疊
print(np.stack((a,b))) # 橫向堆疊
>>>>
[0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
[['1']
['2']
['3']
['a']
['b']
['c']]
[[ 0 10]
[ 1 11]
[ 2 12]
[ 3 13]
[ 4 14]
[ 5 15]
[ 6 16]
[ 7 17]
[ 8 18]
[ 9 19]]
[[ 0 1 2 3 4 5 6 7 8 9]
[10 11 12 13 14 15 16 17 18 19]]
陣列拆分
陣列拆分同樣分為橫向拆分和豎向拆分。
# 陣列拆分
ar = np.arange(16).reshape(4,4)
print(ar)
print(np.hsplit(ar,2)) #縱向拆分
print(np.vsplit(ar,2)) #橫向拆分
>>>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
常用計算函式
這裡的計算函式與Python中的計算函式用法相同,這裡不再過多論述。
#計算函式
np.mean() #求平均值
np.max() #最大值
np.min() #最小值
np.gtd() #標準差
np.var() #方差
np.sum() # 其中引數axis=0按列求和axis=1按行求和
鞏固練習
生成一個一維陣列、二維陣列,並且檢視其shape
生成一個一維陣列,起始值為5,終點值為15,樣本數為10個
按照要求建立以下陣列
建立一個20個元素的陣列,分別改變成兩個形狀:(4,5),(5,6)
建立一個(4,4)的陣列,把其元素型別改為字元型
建立一個二維陣列ar,起始值為0,終點值為15,運用陣列的運算方法得到結果:result = ar * 10 +100,並求出result的均值及求和
後臺回覆「作業」檢視作業答案
推薦閱讀
爬蟲 | Python學習之Scrapy-Redis實戰京東圖書
鹹魚普拉思
一隻鹹魚在程式設計路上的摸爬滾打,記錄摸索中的點點滴滴。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556785/viewspace-2216600/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Data Science | Numpy基礎(二)
- Numpy基礎
- NumPy 基礎 (一) - 建立陣列陣列
- Python Numpy基礎教程Python
- numpy 基礎入門 - 30分鐘學會numpy
- NumPy基礎知識圖譜
- CS439: Introduction to Data Science
- NumPy 基礎 (二) - 陣列運算陣列
- NumPy 基礎 (三) - 數學函式函式
- Making Kotlin Ready for Data ScienceKotlin
- Agile Data Science: Building Data Analytics Applications with HadoopUIAPPHadoop
- Numpy基本用法(很基礎的點哦)
- 轉載《Data Guard Broker基礎》
- Python科學計算庫NumPy基礎操作Python
- python numpy基礎 陣列和向量計算Python陣列
- Doing Data Science: Straight Talk from the FrontlineAI
- python-資料分析-NumPy的應用-1、基礎Python
- Azure Data Factory(九)基礎知識回顧
- iOS開發基礎135-Core DataiOS
- Numpy庫基礎分析——詳解datetime型別的處理型別
- 學會使用 NumPy:基礎、隨機、ufunc 和練習測試隨機
- 一、基礎
- 【基礎篇索引】索引基礎(一)索引
- 零基礎入門深度學習(一):用numpy實現神經網路訓練深度學習神經網路
- salesforce零基礎學習(一百零五)Change Data CaptureSalesforceAPT
- 深度學習基礎-基於Numpy的卷積神經網路(CNN)實現深度學習卷積神經網路CNN
- JavaScript 基礎卷(一):基礎語法JavaScript
- numpy 常用api(一)API
- 逆向基礎(一)
- JS·基礎(一)JS
- Dart基礎(一)Dart
- django基礎(一)Django
- React基礎(一)React
- JavaScript基礎(一)JavaScript
- 基礎題一
- Oracle 19C Data Guard基礎運維-06 PROTECTION MODEOracle運維
- Oracle 19C Data Guard基礎運維-02 Switchovers(物理)Oracle運維
- Python必備基礎:這些NumPy的神操作你都掌握了嗎?Python