读取数组
在 NumPy 里,大部分的操作都是使用 ndarray 来完成,ndarray 是一个快速的且可以节省空间的多维度数组对象,这篇教学会介绍使用 NumPy 快速建立多维数组 ndarray。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
读取数组的方法
NumPy 有下列几种读取数组的方法:
| 方法 | 说明 |
|---|---|
| 索引值读取 | 根据数据在数组中的“索引值”读取该项目内容。 |
| 切片读取 | 使用类似串列切片 slice 的方式,取出某一个范围的项目。 |
| 布尔值读取 | 使用布尔值筛选出结果为 True 的项目。 |
索引值读取
对于一维的 ndarray 数组,只要指定数据项目在数组中的“索引值”,就能读取该项目内容,下方的例子会取出数组的第一个项目和第二个项目 ( 第一个项目的索引值为 0 )。
import numpy as np
a = np.array([1,2,3,4,5])
print(a[0]) # 1
print(a[1]) # 2
对于多维的 ndarray 数组,可以使用“索引值串列”的方式,读取指定的项目内容,下方的例子会读取二维数组中的两个项目 ( 可参考图片中显示的项目位置 )。
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print(a[0,0]) # 1
print(a[1,1]) # 5
下方的例子会读取三维数组中的四个项目 ( 可参考图片中显示的项目位置 )。
import numpy as np
a = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(a[0,0,0]) # 1
print(a[0,1,0]) # 3
print(a[1,0,1]) # 6
print(a[1,1,1]) # 8
如果索引值设定为“负值”,表示从右侧开始取值,下方的例子如果设定 -1,就会取得最后一个项目的内容。
import numpy as np
a = np.array([[[1,2],[3,4]],[[5,6],[7,8]]])
print(a[0,0,-1]) # 2
print(a[0,1,-1]) # 4
print(a[1,-1,1]) # 8
print(a[1,1,1]) # 8
切片读取
对于一维的 ndarray 数组,可以使用类似串列切片 slice 的方式,取出某一个范围的项目,变成新的数组 ( 注意第一项的索引值为 0,如果设定 -1 则是取出“倒数第二项” )。
import numpy as np
a = np.array([1,2,3,4,5,6,7,8,9])
print(a[2:5]) # [3 4 5] 從第三項取值到第五項 ( 不包含第六項 )
print(a[:5]) # [1 2 3 4 5] 從第一項取值到第五項 ( 不包含第六項 )
print(a[2:]) # [3 4 5 6 7 8 9] 從第三項開始取值
print(a[2:-1]) # [3 4 5 6 7 8] 從第三項取值到倒數第二項
print(a[::2]) # [1 3 5 7 9] 間隔 2 取值
print(a[2:8:2]) # [3 5 7] 第三項到第七項,間隔 2 取值
print(a[::-1]) # [9 8 7 6 5 4 3 2 1] 反轉
print(a[[1,3,5,7]]) # [2 4 6 8] 取出第二、第四、第六和第八項
对于多维的 ndarray 数组,会根据切片的设定,产生新的多维数组。
import numpy as np
a = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])
print(a[0, 2:4]) # [3 4]
print(a[1:, 2:4])
'''
[[ 8 9]
[13 14]]
'''
print(a[:, 2:4])
'''
[[ 3 4]
[ 8 9]
[13 14]]
'''
布尔值读取
读取 ndarray 数组时,可以搭配“布尔值”进行筛选,筛选后会将结果为 True 的项目留下,成为一个新的数组,下方的例子会筛选出数组中数值大于 5 的项目、偶数以及数值介于 5~12 间的项目。
import numpy as np
a = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
print(a[a>5]) # [ 6 7 8 9 10 11 12 13 14 15] 篩選數值大於 5 的項目
print(a[a%2==0]) # [ 2 4 6 8 10 12 14] 篩選出數值為偶數的項目
print(a[(a>5) & (a<12)]) # [ 6 7 8 9 10 11] 篩選出數值為 5~12 之間的項目 ( 注意括號 )
如果是多维数组,筛选后会变成一个新的一维数组,下方的例子会取出 b 数组中数值介在 3 与 13 之间的项目。
import numpy as np
b = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]])
print(b[(b[:]>3) & (b[:]<13)]) # [ 4 5 6 7 8 9 10 11 12]
微信扫码关注
抖音扫码关注