為自己Coding
為自己Coding

YO~~ 剛跨入AI人工智慧領域的小小工程師, 熱愛自學, 熱愛分享, 下班後的我想為自己Coding, 積極撰寫教學文, 想將自學的程式知識分享給大家, 不斷追求進步的自己, 希望有一天能回饋社會,幫助需要幫助的人, 如果您有什麼很酷的想法,也覺得我還行,歡迎您找我合作~~ IG: https://www.instagram.com/coding_4_me/

Python讀書會 - 公開課程讀書會筆記 - NumPy Array 數組切割 - NumPy copy & deep copy 帶大家了解使用=賦值和使用copy的差別在哪

Github連結

攝影師:Rodrigo Souza,連結:Pexels



哈囉,大家好!!由於小弟最近接到擔任舉辦讀書會的講師,而這個讀書會是根據莫凡Python公開課程所開設的,大家希望我可以帶他們看過莫凡Python的相關系列課程,所以讀書會這個系列主要是根據莫凡Python的公開系列課程講解和筆記,當然我也會額外找尋資料並補充給大家,也因為是根據公開課程的筆記,所以我都會明確記錄出處,如果有違反作者權力,麻煩告知,我會在第一時間立即刪除這系列的文章,感謝大家,當然也要特別感謝莫凡Python這麼厲害的公開課程,讓大家可以無痛初探Python的魔法世界!!

我是跟其他優秀的講師一起開設莫凡Python讀書會的,所以我不會每個章節都有筆記喔XD!!



1. NumPy Array 數組切割


課程資料來源: 9 numpy的 array分割 (教学教程)

創建數組

import numpy as np
​
## 創建數組
A = np.arange(20).reshape((5,4))
print(A)

執行結果

[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]
 [12 13 14 15]
 [16 17 18 19]]

等量縱向切割 - np.split

## 縱向分割 - 切割成兩段
print(np.split(A, 2, axis = 1))

執行結果

[array([[ 0, 1],
   [ 4, 5],
   [ 8, 9],
   [12, 13],
   [16, 17]]), array([[ 2, 3],
   [ 6, 7],
   [10, 11],
   [14, 15],
   [18, 19]])]

等量橫向切割 - np.split

## 橫向切割 - 切成五段
print(np.split(A, 5, axis = 0))

執行結果

[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]]), array([[12, 13, 14, 15]]), array([[16, 17, 18, 19]])]

等量切割報錯狀況

## 當遇到不等量的切割時會報錯
print(np.split(A, 2, axis = 0))
## 因為5沒辦法等量切割成兩段

執行結果

ValueError: array split does not result in an equal division

報錯原因: 因為5沒辦法等量切割成兩段

不等量切割 - array_split

print(A)
​
## 不等量的切割
print(np.array_split(A, 2, axis = 1))

執行結果

[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]
 [12 13 14 15]
 [16 17 18 19]]
[array([[ 0, 1],
   [ 4, 5],
   [ 8, 9],
   [12, 13],
   [16, 17]]), array([[ 2, 3],
   [ 6, 7],
   [10, 11],
   [14, 15],
   [18, 19]])]

更多切割方法 - np.hsplit、np.vsplit

print(A)
​
## 水平切割 等同於np.split(A, 5, axis = 0)
print(np.hsplit(A, 2))
​
## 垂直切割 等同於np.split(A, 2, axis = 1)
print(np.vsplit(A, 5))

執行結果

[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]
 [12 13 14 15]
 [16 17 18 19]]
[array([[ 0, 1],
   [ 4, 5],
   [ 8, 9],
   [12, 13],
   [16, 17]]), array([[ 2, 3],
   [ 6, 7],
   [10, 11],
   [14, 15],
   [18, 19]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]]), array([[12, 13, 14, 15]]), array([[16, 17, 18, 19]])]



2. NumPy copy & deep copy 講解


課程資料來源: 10 numpy的 copy & deep copy (教学教程)

創建數組

import numpy as np
​
a = np.arange(6)
print(a)

執行結果

[0 1 2 3 4 5]

使用 = 來創建一樣的數組

## 賦值
b = a
c = a
d = b
print(a, b, c, d)

執行結果

[0 1 2 3 4 5] [0 1 2 3 4 5] [0 1 2 3 4 5] [0 1 2 3 4 5]

更改A的時候會同時影響所有用=創建的數組

## 當改變a的時候,b、c、d都會跟著改變
a[0] = 11
print(a, b, c, d)
​
## 判斷b、c、d是否與a一樣
print(b is a)
print(c == a)
print(d is a)

執行結果

[11 1 2 3 4 5] [11 1 2 3 4 5] [11 1 2 3 4 5] [11 1 2 3 4 5]
True
[ True True True True True True]
True

更改D也同時會影響A、B、C

## 更改d值,a、b、c也會更著改變
d[2:5] = [6,6,6]
print(a, b, c, d)

執行結果

[11 1 6 6 6 5] [11 1 6 6 6 5] [11 1 6 6 6 5] [11 1 6 6 6 5]

使用copy來構建複本,當A更改後就不會影響COPY所創建出來的複本

## 使用copy創建a的複本e,改變a的時候就不會影響b
e = a.copy()
print(e)
a[1] = 100
print(a)
print(e)
print(a is e)

執行結果

[ 11 100 6 6 6 5]
[ 11 100 6 6 6 5]
[ 11 100 6 6 6 5]
False
CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论