目录
一、数组变换
1数组重塑
对于定义好的数组我们可以通过reshape()函数改变数据维度,输入的参数为新维度的一个元组
import numpy as np
arr1 = np.arange(36)
print('arr1:\n',arr1)
arr2=arr1.reshape(6,6)
print('arr2:\n',arr2)
arr3 = arr1.reshape(6,-2)
print('arr3:\n',arr3)
#结果如下
# arr1:
# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# 24 25 26 27 28 29 30 31 32 33 34 35]
# arr2:
# [[ 0 1 2 3 4 5]
# [ 6 7 8 9 10 11]
# [12 13 14 15 16 17]
# [18 19 20 21 22 23]
# [24 25 26 27 28 29]
# [30 31 32 33 34 35]]
# arr3:
# [[ 0 1 2 3 4 5]
# [ 6 7 8 9 10 11]
# [12 13 14 15 16 17]
# [18 19 20 21 22 23]
# [24 25 26 27 28 29]
# [30 31 32 33 34 35]]
二、数组合并
数组合并是数据处理中需要经常使用到的,numpy利用hstack() vstack() concatenate()函数来完成数组的合并
2.1 np.concatenate():将两个或多个数组沿指定轴连接
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.concatenate((a, b))
print(c) # [1 2 3 4 5 6]
2.2 np.vstack():按垂直方向(行方向)堆叠数组。
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.vstack((a, b))
print(c)
# [[1 2 3]
# [4 5 6]]
2.3 np.hstack():按水平方向(列方向)堆叠数组。
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.hstack((a, b))
print(c) # [1 2 3 4 5 6]
2.4 np.column_stack():按列方向堆叠一维数组为二维数组。
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.column_stack((a, b))
print(c)
# [[1 4]
# [2 5]
# [3 6]]
2.5 np.row_stack():按行方向堆叠一维数组为二维数组。
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.row_stack((a, b))
print(c)
# [[1 2 3]
# [4 5 6]]
三、数组分割
数组分割是指将一个数组中的元素按照某种规则分割成多个子数组。常见的分割规则包括按照固定大小分割、按照特定值或条件分割等。numpy提供hsplit()、vsplit()、 split()
import numpy as np
arr = np.arange(16).reshape(4,4)
print('横向分割为:\n',np.hsplit(arr,2))
print('纵向组合为:\n',np.vsplit(arr,2))
# 横向分割为:
# [array([[ 0, 1],
# [ 4, 5],
# [ 8, 9],
# [12, 13]]), array([[ 2, 3],
# [ 6, 7],
# [10, 11],
# [14, 15]])]
# 纵向组合为:
# [array([[0, 1, 2, 3],
# [4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
# [12, 13, 14, 15]])]
四、数组索引和切片
4.1 索引和切片(一维)
arr = np.arange(20)
print(arr)
print(arr[6])
print(arr[-6])
print(arr[3:6])
# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
# 6
# 14
# [3 4 5]
4.2 索引和切片(多维)
import numpy as np
arr = np.arange(18).reshape(3,6)
print(arr)
print(arr[1,2:6]) #索引第1行中第2列到第6列的元素
print(arr[:,4]) #索引第4列元素
print('result1:',arr[(0,1),(1,3)])
print('result2:',arr[1:2,(0,2,3)]) #索引第1、2行中第0、2、3列的元素
data = np.array([1,0,1],dtype = np.bool_) #data是一个布尔数组,它索引第0,2行中第1列元素
print('result3:',arr[data,1])
# [[ 0 1 2 3 4 5]
# [ 6 7 8 9 10 11]
# [12 13 14 15 16 17]]
# [ 8 9 10 11]
# [ 4 10 16]
# result1: [1 9]
# result2: [[6 8 9]]
# result3: [ 1 13]
4.3 数组copy(复制)
arr1 = arr[-4:-1].copy()
print(arr)
print(arr1)
# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
# [16 17 18]