import numpy as np
# 使用 array()创建一个数组
# 数组元素只能是一种类型,列表中可以有多中类型 字符串 > 浮点型 > 整型
ret = np.array([1, 2, 3])
[1 2 3]
数组的属性及元素类型
print(img_arr.shape, "形状") # 形状
print(img_arr.ndim, '维度') # 维度
print(img_arr.size, '元素个数') # 元素个数
print(img_arr.dtype, '数组元素类型') # 数组元素类型
print(type(ret), '数组类型') # 数组类型 <class 'numpy.ndarray'>
img_arr(dtype="XXX") # 可以设定数据类型
img_arr.dtype = "XXX" # 可以修改数据类型
数组的创建方式
ret1 = np.ones(shape=(4, 5)) # 4行 5列
[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
ret2 = np.linspace(0, 100, num=20) # 等差数列
[ 0. 5.26315789 10.52631579 15.78947368 21.05263158
26.31578947 31.57894737 36.84210526 42.10526316 47.36842105
52.63157895 57.89473684 63.15789474 68.42105263 73.68421053
78.94736842 84.21052632 89.47368421 94.73684211 100. ]
ret3 = np.arange(0, 100, step=2) # 步长为 2
[ 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46
48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94
96 98]
np.random.seed(0) # 固定随机性, 不加数组就是随机的
ret4 = np.random.randint(0, 100, size=(3, 4))
[[44 47 64 67]
[67 9 83 21]
[36 87 70 88]]
numpy 的索引和切片操作
# 索引与列表同理
arr = np.random.randint(0, 100, size=(5, 7))
[[96 61 12 70 74 21 57]
[16 66 95 52 75 28 12]
[17 54 45 40 36 41 65]
[88 57 90 9 48 32 7]
[50 62 54 83 24 45 47]]
arr[0][2] # 第一个参数为行 第二个参数是位置
12
arr[:,0:1][1] # 第一个参数为列 第二个参数是位置
[16]
切片
ret = arr[0:2] # 切出数组的前两行
[[96 61 12 70 74 21 57]
[16 66 95 52 75 28 12]]
ret = arr[:, 0:1] # 切出数组的第一列 逗号左边是行 右边是列
[[96]
[16]
[17]
[88]
[50]]
ret = arr[0:2, 0:2] # 切出数组的前两行的前两列
[[96 61]
[16 66]]
# 数据反转 参数位置 行:列:颜色
arr1 = arr[::-1,:] # 行倒置
[[50 62 54 83 24 45 47]
[88 57 90 9 48 32 7]
[17 54 45 40 36 41 65]
[16 66 95 52 75 28 12]
[96 61 12 70 74 21 57]]
arr2 = arr[:,::-1] # 列倒置
[[57 21 74 70 12 61 96]
[12 28 75 52 95 66 16]
[65 41 36 40 45 54 17]
[ 7 32 48 9 90 57 88]
[47 45 24 83 54 62 50]]
arr3 = arr[::-1,::-1] # 数据倒置
[[47 45 24 83 54 62 50]
[ 7 32 48 9 90 57 88]
[65 41 36 40 45 54 17]
[12 28 75 52 95 66 16]
[57 21 74 70 12 61 96]]
变形 reshape
# 变形 reshape
arr = np.random.randint(0,20,size=(3,4))
[[19 4 16 7]
[ 2 1 14 1]
[15 15 2 5]]
# 将二维数组改成一维数组
ret = arr.reshape((12,)) # 参数必须等于原来的size 大小都不行
[19 4 16 7 2 1 14 1 15 15 2 5]
# 将一维数组改成二维数组
print(ret.reshape((2,6))) # 保证容量一致 (6,2)(3,4)都行
[[19 4 16 7 2 1]
[14 1 15 15 2 5]]
级联操作
arr = np.random.randint(0,20,size=(3,4))
[[17 9 8 2]
[16 15 16 15]
[ 4 6 16 12]]
ret= np.concatenate((arr,arr),axis=1) # 0 竖向 1 水平
[[17 9 8 2 17 9 8 2]
[16 15 16 15 16 15 16 15]
[ 4 6 16 12 4 6 16 12]]
聚合操作 sum-求和 max-最大值 min-最小值 mean-平均数 没有全展示,可以自己试一下
arr = np.random.randint(0,20,size=(3,4))
print(arr)
[[ 8 9 19 16]
[16 13 13 17]
[ 0 16 0 10]]
print(arr.sum(axis=None))
137
print(arr.sum(axis=1))
[52 59 26]
print(arr.sum(axis=0))
[24 38 32 43]
常用的数学函数
# sin(), cos(), tan() around()
arr = np.random.randint(0,10,size=(2,2))
[[2 0]
[8 2]]
print(np.sin(arr))
[[0.90929743 0. ]
[0.98935825 0.90929743]]
arr1 = np.random.random(size=4)
print(arr1+19)
[19.74596448 19.15807632 19.37253376 19.47411304]
print(np.around(arr1+249, decimals=-2)) # 1 保留小数点后一位 2 保留后两位 0 不保留小数 -1 看个位 -2 看十位
[200. 200. 200. 200.]
常用的统计函数
arr = np.array([[22, 24, 25, 20, 18], [20, 18, 30, 29, 22]])
print(np.amin(arr, axis=1)) # 计算数组中元素沿指定轴的最大值最小值 1 竖直 0 水平
[18 18]
print(np.amax(arr,axis=0))
[22 24 30 29 22]
print(np.std(arr)) # 标准差 数据波动情况 公式: std = sqrt(mean((x-x.mean())**2))
3.9949968710876362
print(np.var(arr)) # 方差 标准差的平方
15.960000000000003
矩阵相关
# 矩阵
arr = np.array([[1,2],[3,4]])
arr1 = np.array([[1,2],[1,0]])
print(arr+arr1) # 矩阵相加
[[0 0]
[2 4]]
print(arr-arr1) # 矩阵相减
[[0 0]
[2 4]]
print(np.dot(arr,arr1)) # 行和列相乘的和为新元素 [(1*1 + 2*1 ,1*2 + 1*0),(3*1 + 4*1 , 3*2 + 4*0 ) ]
[[3 2]
[7 6]]
网友评论