Python資料分析 numpy 筆記

银河小船儿發表於2024-04-09

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的矩陣)

相關文章