陣列項目賦值
除了在建立陣列提供陣列項目內容,也可以在建立陣列後,針對特定的項目賦值,這篇教學將會介紹 NumPy 裡陣列項目賦值的方法。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
一般的賦值
一般的賦值就如同 Python 串列的賦值方式,只要知道項目在陣列中的位置,就能指定該項目的內容。
import numpy as np
a = np.zeros((5,5))
a[0][0] = 1
a[1][1] = 2
a[2][2] = 3
a[3][3] = 4
a[4][4] = 5
print(a)
'''
[[1. 0. 0. 0. 0.]
[0. 2. 0. 0. 0.]
[0. 0. 3. 0. 0.]
[0. 0. 0. 4. 0.]
[0. 0. 0. 0. 5.]]
'''
使用 NumPy 也能將上面的程式碼換成下方的寫法,會得到同樣的結果。
import numpy as np
a = np.zeros((5,5))
a[0,0] = 1
a[1,1] = 2
a[2,2] = 3
a[3,3] = 4
a[4,4] = 5
print(a)
'''
[[1. 0. 0. 0. 0.]
[0. 2. 0. 0. 0.]
[0. 0. 3. 0. 0.]
[0. 0. 0. 4. 0.]
[0. 0. 0. 0. 5.]]
'''
批次賦值
如果遇到「多個項目同時賦值」的狀況,只要透過 NumPy 就不需要再使用大量的迴圈去層層賦值,下面的例子會一次將第一列 ( row ) 的 2、3、4 個項目的內容換成 100。
import numpy as np
a = np.zeros((3,5))
a[0,[2,3,4]]] = 100
print(a)
'''
[[ 0. 0. 100. 100. 100.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
'''
將上面的程式碼換成下方「串列切片 slice」的寫法,會得到同樣的結果。
import numpy as np
a = np.zeros((3,5))
a[0,2:5] = 100
print(a)
'''
[[ 0. 0. 100. 100. 100.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
'''
延伸同樣的原理,下方的程式碼使用了兩個串列切片,就能在 10x10 陣列裡,將中間 6x6 的項目內容都替換為 1。
import numpy as np
a = np.zeros((10,10))
a[2:8,2:8] = 1
print(a)
'''
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 1. 1. 1. 1. 1. 0. 0.]
[0. 0. 1. 1. 1. 1. 1. 1. 0. 0.]
[0. 0. 1. 1. 1. 1. 1. 1. 0. 0.]
[0. 0. 1. 1. 1. 1. 1. 1. 0. 0.]
[0. 0. 1. 1. 1. 1. 1. 1. 0. 0.]
[0. 0. 1. 1. 1. 1. 1. 1. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
'''
小結
透過 NumPy 函式庫,能夠很快速的針對陣列中某個範圍的項目進行賦值,大幅減少迴圈的使用,提高程式碼撰寫的效率以及增加程式碼的可讀性。
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~