数组项目赋值
除了在建立数组提供数组项目内容,也可以在建立数组后,针对特定的项目赋值,这篇教学将会介绍 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 函数库,能够很快速的针对数组中某个范围的项目进行赋值,大幅减少循环的使用,提高程序码撰写的效率以及增加程序码的可读性。
微信扫码关注
抖音扫码关注