一、数组 的索引
1、一维数组的索引
import numpy
## 创建一维数组
arr = numpy.arange(16) ## 结果 [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
## 正向索引(从0开始依次0,1,2,...)
d1 = arr[4]
print(d1) #结果 4
## 反向索引(从-1开始依次-1,-2,-3,...)
d2 = arr[-1]
print(d2) #结果 15
## 多个索引用列表接收
d3 = arr[[-1,6,8]]
print(d3) #[15 6 8]
2、一维数组切片
arr = numpy.arange(16)
## 切片,不包含结束位置
d1 = arr[2:-1]
print(d1) #[ 2 3 4 5 6 7 8 9 10 11 12 13 14]
## 切片,不包含结束位置
d2 = arr[2:-1:3]
print(d2) #[ 2 5 8 11 14]
3、二维数组的索引和切片
#### 二维数组
arr = numpy.arange(16).reshape((4,4))
print(arr) #[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
## 获取 第一行(注:索引是从0开始的)
d1 = arr[0,:] #第一个参数是行,第二个参数是列
print(d1) #[0 1 2 3] [ 1 11]
## 获取第1,3行的前两列
d2 = arr[[0,2],0:2]
#d2 = arr[::2,0:2:1]
print(d2) #[[0 1]
# [8 9]]
## 获取固定行列的元素
d3 = arr[[0,2],[1,3]] #获取第1行第2列 和第3行第4列的元素
print(d3) #[1,11]
4、布尔数组
## bool数组
arr_mask = numpy.array([0,1,2,3],dtype=numpy.bool)
print(arr_mask) #[False True True True]
5、布尔数组切片
索引的数组是二维则布尔维数为一维,切行时行元素个数对应,切列时列对应,否则报错
arr_mask = numpy.array([0,1,2,3],dtype=numpy.bool)
print(arr_mask)
arr = numpy.arange(16).reshape((4,4))
print(arr)
d = arr[arr_mask,:]
# d = arr[:,arr_mask]
print("data:\n",d)
bool 数组做索引,False 为丢弃, True 为选择
多维数组切片
一维 arr[下标/切片]
二维 arr[行下边或者切片,列下标或者切片]
三维 arr[块下标或者切片,行,列]
四维 arr[堆下标或者切片,块,行,列]
6、数组展开成一维数组
#创建数组
arr = numpy.arange(16).reshape((4,4))
## ravel按行展开
d1 = numpy.ravel(arr)
print(d1) #[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
## flatten()参数默认为C,按行展开
d2 = arr.flatten('C')
print(d2) #[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
## flatten()参数为F时,按列展开
d3 = arr.flatten('F')
print(d3) #[ 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15]
二、数组组合
1、vstack() 按行的方向(二维的垂直方向) 组合
arr1 = numpy.arange(10).reshape((2,5))
arr2 = numpy.arange(10).reshape((2,5))
print(arr1) #[[0 1 2 3 4]
# [5 6 7 8 9]]
print(arr2)
new_arr1 = numpy.vstack((arr1,arr2)) #按照行的方向进行拼接
print(new_arr1.shape) #(4,5) 4行5列的数组
print(new_arr1) #[[0 1 2 3 4]
# [5 6 7 8 9]
# [0 1 2 3 4]
# [5 6 7 8 9]]
new_arr2 = numpy.vstack([arr1,arr2]) #按照行的方向(垂直方向)进行拼接
print(new_arr2.shape) #(4,5)
print(new_arr2) #[[0 1 2 3 4]
# [5 6 7 8 9]
# [0 1 2 3 4]
# [5 6 7 8 9]]
2、hstack 按列的方向组合(二维的水平方向)
import numpy
arr1 = numpy.arange(10).reshape((2,5))
arr2 = numpy.arange(10).reshape((2,5))
print(arr1)
print(arr2)
new_arr1 = numpy.hstack((arr1,arr2)) #按照列的方向进行拼接
print(new_arr1.shape) #(2,10) 2行10列的数组
print(new_arr1) #[[0 1 2 3 4 0 1 2 3 4]
# [5 6 7 8 9 5 6 7 8 9]]
new_arr2 = numpy.hstack([arr1,arr2]) #按照列的方向进行拼接
print(new_arr2.shape) #(2,10)
print(new_arr2)
3、concatenate() 参数为 拼接对象, axis(维度数)
import numpy
arr1 = numpy.arange(10).reshape((2,5))
arr2 = numpy.arange(10).reshape((2,5))
print(arr1)
print(arr2)
## (行,列)按第一个维度拼接 和vstack一样
new_arr5 = numpy.concatenate((arr1,arr2),axis=0)
print(new_arr5.shape) #(4, 5)
print(new_arr5) #[[0 1 2 3 4]
# [5 6 7 8 9]
# [0 1 2 3 4]
# [5 6 7 8 9]]
## (行,列) 按第二个维度拼接 和hstack 一样
new_arr6 = numpy.concatenate((arr1,arr2),axis=1)
print(new_arr6.shape) #(2, 10)
print(new_arr6) #[[0 1 2 3 4 0 1 2 3 4]
# [5 6 7 8 9 5 6 7 8 9]]
三、数组的拆分
1、
import numpy
# 创建一个二维数组
arr = numpy.arange(16).reshape((4,4))
print("arr:\n",arr)
# 拆分 ----平均拆分,必须能整除,否则报错
new_arr = numpy.hsplit(arr,4) # 在列的方向上进行分割数组
print("new_arr:\n",new_arr)
print("new_arr:\n",type(new_arr[0]))
new_arr = numpy.vsplit(arr,4) # 在行的方向上进行分割数组
print("new_arr:\n",new_arr)
print("new_arr:\n",type(new_arr[0]))
# 在行的方向上进行分割数组
new_arr = numpy.split(arr,4,axis=0)
# 在列的方向上进行分割数组
new_arr = numpy.split(arr,4,axis=1)
print("new_arr:\n",new_arr)
print("new_arr:\n",type(new_arr[0]))