B站課連結:【Python資料分析三劍客:NumPy、Pandas與Matplotlib】 https://www.bilibili.com/video/BV1Yb4y1g7SV/?p=16&share_source=copy_web&vd_source=e883bdf439c7a2e47e9145990387a56b
014,開始使用numpy
(1),numpy介紹
(2),匯入numpy庫,並檢視numpy版本
#資料分析三劍客
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.__version__
(3)例項:讀取貓圖片的資料
#我自己電腦上的圖片(貓咪1.jpg),注意路徑是 / ,只有一個/
#圖片:其實是數字組成的,三維陣列
# RGB 紅Red,綠Green,藍Blue
# RGB 範圍:0~255
# plt.imread : 讀取圖片的資料
cat = plt.imread('C:/Users/romantic/Pictures/Saved Pictures/貓咪1.jpg')
cat
type(cat)
# numpy.ndarray : 多維陣列
# nd : n維度,多維
# array : 陣列
#檢視形狀:三維
# (540, 960, 3)
# 高度:540行
# 寬度:960列
# 3 表示的RGB(red,green,blue)的值
cat.shape
#顯示圖片
plt.imshow(cat)
# (540, 960, 3)
# 圖片:3維資料(彩色)
# 2維資料(黑白)
# 影片:4維資料
# (x,540, 960, 3),x表示多少張圖片
#一切皆資料,一切皆矩陣(在資料中)
015,建立ndarray陣列
ndarray是numpy中表示陣列的重要型別
(1),使用np.array() 建立
引數為列表:[1,4,2,5,3]
I = [1,4,2,3,5,6]
n = np.array(I)
n
type(n) #型別
# numpy.ndarray
n.shape #形狀,6表示一維陣列裡有6個元素
# I.shape # 列表沒有shape
# 優先順序:str>float>int
n = np.array([3.14,2,"hello"])
n
(2),使用np的routines函式建立
(2.1)ones
n = np.ones(shape=(3,4)) #3行4列
n
n = np.ones(shape=(3,4,5),dtype=np.int16) # 3個二維陣列,每個二維陣列是4行5列,型別為整型
# n = np.ones(shape=(3,4,5),dtype=int)
n
(2.2)zeros
n = np.zeros((5,5),dtype=np.int16) # 5行5列,型別為整型
n
(2.3)full
n = np.full(shape=(3,4),fill_value=2) # 3行4列,所有元素都為2
n
(2.4)eye
#對角線為1,其他位置為0的二維陣列
#單位矩陣:主對角線都是1,其他都是0
n = np.eye(6,6,dtype=np.int8) # 6行6列,型別為整型
n
# k=2:向右偏移2個位置
n = np.eye(6,6,k=2,dtype=np.int8)
n
# k=-2:向左偏移2個位置
n = np.eye(6,6,k=-2,dtype=np.int8)
n
(2.5)linspace
#等差數列
# 1,3,5,7,9
n = np.linspace(0,100,num=51,dtype=np.int16) #0~2佔了一份,其他2~100中間有50份
n
# endpoint=False
n = np.linspace(0,100,num=51,endpoint=False)# 不包含100
n
#retstep=True : 顯示步長
n = np.linspace(0,100,num=51,retstep=True)
n
(2.6)arange
n = np.arange(10) # 0~9,不包含10
n
n = np.arange(2,10) # 2~9,不包含10
n
n = np.arange(2,10,2) # 2~9,不包含10,步長為2
n
(2.7)random.randint
# 隨機整數,範圍:[0,3]
n = np.random.randint(3)
n
# 隨機整數,範圍:[3,10]
n = np.random.randint(3,10)
n
# 隨機整數:一維,一維陣列裡有6個元素
n = np.random.randint(3,10,size=6)
n
# 隨機整數:二維,3行4列
n = np.random.randint(3,10,size=(3,4))
n
# 隨機整數:三維,也可以理解為:3個二維陣列,每個二維陣列是4行5列
n = np.random.randint(3,10,size=(3,4,5))
n
(2.8)random.random
n = np.random.random(size=(3,4))
n
017,ndarray常用屬性
cat.shape # 三維陣列
# (540, 960, 3)
# 第一個維度:540
# 第二個維度:960
# 第三個維度:3
# 有幾個數字就表示幾維
cat.ndim # 維度
cat.size # 總資料量 540*960*3
cat.dtype # 元素型別
# uint8:無符號整數
018,索引操作(以下程式碼直接截圖了)
根據索引修改資料
019,切片操作
一維與列表完全一致,多維同理
020,翻轉操作
021,陣列變形reshape
使用reshape函式
022,陣列的級聯合並
(22.1)np.concatenate()
- 引數是列表或元組
- 級聯的陣列維度必須相同
- 可透過axis引數改變級聯的方向
(22.2)np.hstack 與 np.vstack
- 水平級聯與垂直級聯
023,陣列的拆分/切分/分割
025,聚合函式
(25.1)np.sum 和 np.nansum (nan:not a number)
- nan:數值型別,not a number:不是一個正常的數值,表示空
- np.nan:float型別
029,陣列的快速排序
030,檔案IO操作
(30.1)儲存陣列
- save:儲存ndarray到一個npy檔案
- savez:將多個array儲存到一個npz檔案中
生成的檔案
(30.2)讀取陣列
(30.3)csv,txt檔案的讀寫操作
031,練習題講解1
(31.1)建立一個長度為10的一維全為0的ndarray物件,然後讓第5個元素等於1
(31.2)建立一個元素為從10到49的ndarray物件
(31.3)將第2題的所有元素位置反轉
(31.4)使用np.random.random建立一個10*10的ndarray物件,並列印出最大最小元素
(31.5)建立一個10*10的ndarray物件,且矩陣邊界全為1,裡面全為0
第1種方法
第2種方法
(31.6)建立一個每一行都是從0到4的5*5矩陣
032,練習題講解2
(32.1)給定一個4維矩陣,如何得到最後兩維的和?
(32.2)給定陣列[1,2,3,4,5],如何得到在這個陣列的每個元素之間插入3個0後的新陣列
(32.3)給定一個二維矩陣,如何交換其中兩行的元素?
(32.4)矩陣的每一行的元素都減去該行的平均值
(32.5)列印出如下矩陣(要求使用np.zeros建立8*8的矩陣)