一、ndarray
1.ndarray特性
多维性
python
import numpy as np
arr = np.array(5) # 创建一个0维度的ndarray数组
print(arr)
print('arr的维度:',arr.ndim) # 数组的维度number of dimensions
5
arr的维度: 0
python
arr = np.array([1,2,3]) # 创建一个1维度的ndarray数组
print(arr)
print('arr的维度:',arr.ndim) # 数组的维度number of dimensions
[1 2 3]
arr的维度: 1
python
arr = np.array([[1,2,3],[4,5,6],[7,8,9]]) # 创建一个2维度的ndarray数组
print(arr)
print('arr的维度:',arr.ndim) # 数组的维度number of dimensions
[[1 2 3]
[4 5 6]
[7 8 9]]
arr的维度: 2
同质性
python
arr = np.array([1,"hello"]) # 不同的数据类型会被枪支转换为相同的数据类型
print(arr) # 数字1 转化为字符串
print('arr的维度:',arr.ndim)
['1' 'hello']
arr的维度: 1
python
arr = np.array([1,2.5]) # 不同的数据类型会被枪支转换为相同的数据类型
print(arr) # 数字1 转化为浮点数
print('arr的维度:',arr.ndim)
[1. 2.5]
arr的维度: 1
2.ndarray的属性
python
arr = np.array(1)
print(arr)
print('数组的性状:',arr.shape)
print('arr的维度:',arr.ndim)
print('元素的个数:',arr.size)
print('元素的数据类型:',arr.dtype)
print('元素的转置:',arr.T)
1
数组的性状: ()
arr的维度: 0
元素的个数: 1
元素的数据类型: int64
元素的转置: 1
元素的数据类型: int64
python
arr = np.array([1,2,3,4,5])
print(arr)
print('数组的性状:',arr.shape)
print('arr的维度:',arr.ndim)
print('元素的个数:',arr.size)
print('元素的数据类型:',arr.dtype)
print('元素的转置:',arr.T)
[1 2 3 4 5]
数组的性状: (5,)
arr的维度: 1
元素的个数: 5
元素的数据类型: int64
元素的转置: [1 2 3 4 5]
python
arr = np.array([[1,2,3],[4,5,6],[7,8,9]]) # 创建一个2维度的ndarray数组
print(arr)
print('数组的性状:',arr.shape)
print('arr的维度:',arr.ndim)
print('元素的个数:',arr.size)
print('元素的数据类型:',arr.dtype)
print('元素的转置:',arr.T)
[[1 2 3]
[4 5 6]
[7 8 9]]
数组的性状: (3, 3)
arr的维度: 2
元素的个数: 9
元素的数据类型: int64
元素的转置: [[1 4 7]
[2 5 8]
[3 6 9]]
3.ndarray的创建
python
# 基础的创建方法
arr = np.array([1,2,3,4,5]) # 方法或者命令带小括号
print(arr.ndim) # 属性不带小括号
print(arr)
1
[1 2 3 4 5]
python
# 基础的创建方法
list1= [1,2,3,4,5]
arr = np.array(list1,dtype=np.float64) # 方法或者命令带小括号
print(arr.ndim) # 属性不带小括号
print(arr)
1
[1. 2. 3. 4. 5.]
python
# copy
arr1 = np.copy(arr) # 元素和原始的数组相同,但是 不是同一个数组了
arr1[0] = 9
print(arr)
print(arr1)
[1. 2. 3. 4. 5.]
[9. 2. 3. 4. 5.]
python
# 预定义性状
# 全0 全1 未初始化 固定值
# 全0
arr = np.zeros((2,3)) # 创建一个两行三列的数组 float类型
print(arr)
print(arr.dtype)
[[0. 0. 0.]
[0. 0. 0.]]
float64
python
arr = np.zeros((2,3),dtype=int) # 创建一个两行三列的数组 float类型
print(arr)
print(arr.dtype)
[[0 0 0]
[0 0 0]]
int64
python
arr = np.zeros((200,),dtype=int) # 创建一个两行三列的数组 float类型
print(arr)
print(arr.dtype)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
int64
python
# 全1
arr = np.ones((2,3),dtype=int) # 创建一个两行三列的数组 int类型
print(arr)
print(arr.dtype)
[[1 1 1]
[1 1 1]]
int64
python
# 未初始化
arr = np.empty((4,5)) # 随便填数字
print(arr)
[[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
python
# 未初始化
arr = np.empty((9,5)) # 创建一个两行三列的数组 float类型
print(arr)
[[ 1.10435912e-311 1.58101007e-321 0.00000000e+000 0.00000000e+000
1.10343781e-311]
[ 1.16095484e-028 2.17237198e-153 4.83245960e+276 3.42703236e-062
9.65024774e-048]
[ 2.71743175e-033 -8.18957894e-266 -1.32349388e+176 -5.61086747e-025
9.27777466e+242]
[-4.01320607e-020 6.96770842e+252 3.77075687e+233 -3.53284610e-203
-7.00425530e+185]
[-6.97343549e-180 1.40022644e+195 1.75300433e+243 1.96087674e+243
-5.61086747e-025]
[ 9.16050719e+242 9.24080564e+135 4.73517493e-120 -4.55528073e-179
-1.00583468e+230]
[ 5.93474630e-085 3.77075677e+233 -2.91330004e-280 -7.00425586e+185
-3.79153276e-021]
[ 5.52541870e-096 6.32300965e+233 7.35874688e+223 -7.67172276e-054
-2.56118924e+191]
[ 1.23696865e+160 7.78025652e-143 2.91237123e+257 4.71294503e+257
1.54531077e+295]]
python
arr = np.full((3,4),2025)
print(arr)
[[2025 2025 2025 2025]
[2025 2025 2025 2025]
[2025 2025 2025 2025]]
python
arr1 = np.zeros_like(arr) # 向上面那个性状一样 填充为零
print(arr1)
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
python
arr1 = np.zeros_like(arr) # 向上面那个性状一样 填充为零
print(arr1)
arr1 = np.empty_like(arr) # 向上面那个性状一样 填充为零
print(arr1)
arr1 = np.ones_like(arr) # 向上面那个性状一样 填充为零
print(arr1)
arr1 = np.full_like(arr,2026) # 向上面那个性状一样 填充为零
print(arr1)
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[2026 2026 2026 2026]
[2026 2026 2026 2026]
[2026 2026 2026 2026]]
python
# 等差数列 1 2 3 4 5 6 .....
arr = np.arange(1,10,1) # start ,end ,step(步长)
print(arr)
[1 2 3 4 5 6 7 8 9]
python
arr = np.arange(2,10,2) # start ,end ,step(步长)
print(arr)
[2 4 6 8]
python
# 等间隔数列
arr = np.linspace(0,100,5,dtype = int)
print(arr)
arr = np.arange(0,101,25)
print(arr)
# [ 0 25 50 75 100]
# [ 0 25 50 75 100]
[ 0 25 50 75 100]
[ 0 25 50 75 100]
python
# 对数间隔数列
arr = np.logspace(0,4,3,base=2,dtype = int)
print(arr)
# [ 1 4 16]
[ 1 4 16]
python
# [ 0 25 50 75 100]
# 对数间隔数列
arr = np.logspace(0, 4, 3, base=3, dtype=int)
print(arr)
# [ 1 9 81]
[ 1 9 81]
python
# 特殊矩阵
# 单位矩阵:主队角线上数字为1,其他的数字为0
arr = np.eye(3,dtype = int)
print(arr)
[[1 0 0]
[0 1 0]
[0 0 1]]
python
# 特殊矩阵
# 单位矩阵:主队角线上数字为1,其他的数字为0
arr = np.eye(3,4,dtype = int)
print(arr)
[[1 0 0 0]
[0 1 0 0]
[0 0 1 0]]
python
# 对角矩阵:主对角线上非零的0,其他的数字为0
arr = np.diag([4,5,6,8])
print(arr)
[[4 0 0 0]
[0 5 0 0]
[0 0 6 0]
[0 0 0 8]]
python
# 随机数组的生成
# 生成0到1之间的随机浮点数(均匀分布) (2,3) 表示两行三列
arr = np.random.rand(2,3)
print(arr)
[[0.96715529 0.90654034 0.52685246]
[0.15500531 0.48372648 0.67746563]]
python
# 生成指定范围区间的随机浮点数 3-6范围之间 (2,3) 表示两行三列
arr = np.random.uniform(3,6,(2,3))
print(arr)
[[4.56610445 5.84172247 3.64363329]
[3.09239852 5.17220886 5.98366346]]
python
# 生成指定范围区间的随机整数数
arr = np.random.randint(3,30,(2,3))
print(arr)
[[20 8 27]
[12 13 29]]
python
# 生成随机数列(正态分布) (-3 到 3 之间)
# 两边的小 , 中间的大
arr = np.random.randn(2,3)
print(arr)
[[-1.90048777 -0.63731408 1.32470851]
[-1.14057709 0.34059305 1.34557702]]
python
# 设置随机的种子 随机数种子设置完随机数就不会变了
np.random.seed(20)
arr = np.random.randint(1,10,(2,5))
print(arr)
[[4 5 7 8 3]
[1 7 9 6 4]]
4、ndarray的数据类型
布尔类型 bool
整数类型 int uint
浮点数 float
复数 complex
python
arr = np.array([1,0,1,0],dtype='bool') # 1是true 0是false
print(arr)
arr = np.array([1,0,1,0],dtype=np.bool) # 1是true 0是false
print(arr)
[ True False True False]
[ True False True False]
python
arr = np.array([1,0,1,0],dtype=np.int8) # 1是true 0是false
print(arr)
[1 0 1 0]
5.索引与切片
python
# 一维数组的索引与切片
arr = np.random.randint(1,100,30)
print(arr)
[17 63 17 8 99 7 27 14 76 59 26 4 75 76 62 78 84 58 95 33 11 7 76 19
4 78 18 44 17 19]
python
arr = np.random.randint(1,100,30)
print(arr)
print(arr[10])
print(arr[:]) # 获取全部的数据和元素
print(arr[2:5]) # 获取部分的数据和元素,不包括后面的 start:end+1 [ ) 左包右不包
print(arr[slice(2,5)]) # 和上面一样 start,end,step
print(arr[slice(2,15,3)])
print(arr[arr>10]) # 把大于10的筛选出来 布尔索引
print(arr[(arr>10)&(arr<70)]) # 筛选出共同部分
[37 93 7 65 8 47 3 27 71 51 76 20 41 76 71 98 74 23 81 81 45 42 67 36
88 50 75 28 95 51]
76
[37 93 7 65 8 47 3 27 71 51 76 20 41 76 71 98 74 23 81 81 45 42 67 36
88 50 75 28 95 51]
[ 7 65 8]
[ 7 65 8]
[ 7 47 71 20 71]
[37 93 65 47 27 71 51 76 20 41 76 71 98 74 23 81 81 45 42 67 36 88 50 75
28 95 51]
[37 65 47 27 51 20 41 23 45 42 67 36 50 28 51]
python
# 二维数组的索引与切片
arr = np.random.randint(1,100,(4,8))
print(arr)
[[ 2 22 6 7 42 69 83 11]
[65 5 76 16 55 12 5 23]
[ 7 60 45 74 12 19 53 65]
[56 65 37 49 96 59 40 38]]
python
print(arr[1,3]) # 索引
print(arr[1,:]) # 1 表示取得第二行 : 表示第二行所有的
print(arr[1,2:5]) # 1 表示取得第二行 2:4 表示第二行第三个数到第五个数
print(arr[arr>50]) # 返回的是一维数组
print(arr[2][arr[2]>50]) # 过滤第三行 选出第三行大于50的数
print(arr[:,2]) # 选出第三列
16
[65 5 76 16 55 12 5 23]
[76 16 55]
[69 83 65 76 55 60 74 53 65 56 65 96 59]
[60 74 53 65]
[ 6 76 45 37]
6.ndarray运算
python
# 算术运算
a = np.array([1,2,3])
b = np.array([1,2,3])
print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(a**b)
# [2 4 6]
[2 4 6]
[0 0 0]
[1 4 9]
[1. 1. 1.]
[ 1 4 27]
python
c = [1,2,3]
d = [4,5,6]
print(c+d) # 相当于两个列表相加
for i in range(len(c)):
d[i] = c[i]+d[i]
print(d)
[1, 2, 3, 4, 5, 6]
[5, 7, 9]
python
# 数组与数组运算
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[4,5,6],[7,8,9],[1,2,3]])
print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(a**b)
[[ 5 7 9]
[11 13 15]
[ 8 10 12]]
[[-3 -3 -3]
[-3 -3 -3]
[ 6 6 6]]
[[ 4 10 18]
[28 40 54]
[ 7 16 27]]
[[0.25 0.4 0.5 ]
[0.57142857 0.625 0.66666667]
[7. 4. 3. ]]
[[ 1 32 729]
[ 16384 390625 10077696]
[ 7 64 729]]
python
# 数组与标量的运算
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a+3)
print(a*3)
[[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 3 6 9]
[12 15 18]
[21 24 27]]
python
# 广播机制
# 同一纬度:相同、1
a = np.array([1,2,3]) # 1*3
b = np.array([[4],[5],[6]]) # 3*1
print(a+b)
print(a-b)
'''
a
1 2 3
1 2 3
1 2 3
b
4 4 4
5 5 5
6 6 6
'''
[[5 6 7]
[6 7 8]
[7 8 9]]
[[-3 -2 -1]
[-4 -3 -2]
[-5 -4 -3]]
python
a = np.array([1,2,3]) # 1*3
b = np.array([4,5]) # 1*2
print(a-b) # 报错
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[132], line 4
1 a = np.array([1,2,3]) # 1*3
2 b = np.array([4,5]) # 3*1
----> 4 print(a-b)
ValueError: operands could not be broadcast together with shapes (3,) (2,)
python
# 矩阵运算
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[4,5,6],[7,8,9],[1,2,3]])
print(a*b) # 对应的行列相乘
print(a @ b) # 用来算矩阵乘法
[[ 4 10 18]
[28 40 54]
[ 7 16 27]]
[[ 21 27 33]
[ 57 72 87]
[ 93 117 141]]
二、Numpy常用函数
1.基本数学函数
python
# 计算平分根
print(np.sqrt(9))
print(np.sqrt([1,4,9]))
arr = np.array([1,25,81])
print(np.sqrt(arr))
3.0
[1. 2. 3.]
[1. 5. 9.]
python
# 计算指数 e^x x 为传入的参数
print(np.exp(1)) # 底默认以e为底
2.718281828459045
python
# 计算自然对数 ln y = x
print(np.log(2.71))
0.9969486348916096
python
# 计算正弦值、余弦值
print(np.sin(-1))
print(np.cos(np.pi))
print(np.sin(np.pi/2))
-0.8414709848078965
-1.0
1.0
python
# 计算绝对值
arr = np.array([-1,1,2,-3])
print(np.abs(arr))
[1 1 2 3]
python
# 计算a 的b次幂
print(np.power(arr,3)) # arr 的二次幂
[ -1 1 8 -27]
python
# 四舍五入
print(np.round([3.5,4.5,5.6,9.6,5.65,5.3])) # 变成整数
[ 4. 4. 6. 10. 6. 5.]
python
# 向上取整
arr = np.array([1.5,5.6,58.6,81.7])
print(np.ceil(arr))
[ 2. 6. 59. 82.]
python
# 向下取整
arr = np.array([1.5,5.6,58.6,81.7])
print(np.floor(arr))
# 检测缺失值 NaN
np.isnan([1,2,np.nan,3])
array([False, False, True, False])
2.统计函数
求和、计算平均值、计算中位数、标准差、方差
查找最大最小值
计算分位数、累计和、累计差
python
arr = np.random.randint(1,20,8)
print(arr)
[ 7 8 17 18 13 2 14 15]
python
# 求和
print(np.sum(arr))
# 计算平均值
print(np.mean(arr))
# 计算中位数
# 奇数:排序后中间的数值
# 偶数:中间的两个数的平均值
print(np.median(arr))
print(np.median([1,2,3]))
print(np.median([1,2,3,4]))
94
11.75
13.5
2.0
2.5
python
# 计算标准差、方差
# 1,2,3 的平均值为2
# 方差[(x1 - arg)^2 + (x2 - arg)^2 +(x3 - arg)^2] / 3
# 标准差 [(x1 - arg)^2 + (x2 - arg)^2 +(x3 - arg)^2] / 3 在开个根号
print(np.var([1,2,3])) # 方差
print(np.var(arr)) # 方差
print(np.std([1,2,3])) # 标准差
0.6666666666666666
26.9375
0.816496580927726
python
arr1 = np.array([1,2,1,2,1,1,1,2])
arr2 = np.array([1,0,3,0,0,0,4,3])
print(np.mean(arr1))
print(np.mean(arr2))
print(np.var(arr1)) # 平均值一样 方差越小越稳定
print(np.var(arr2))
1.375
1.375
0.234375
2.484375
python
#计算最大值和最小值
print(arr)
print(np.max(arr),np.argmax(arr)) # np.argmax(arr) 找出最大值的索引
print(np.min(arr),np.argmin(arr)) # np.argmin(arr) 找出最小值的索引
[ 7 8 17 18 13 2 14 15]
18 3
2 5
python
# 分位数
# 中位数
print(np.median([1,2,3]))
print(np.median([1,2,3,4]))
np.random.seed(0)
arr = np.random.randint(0,100,4)
print(arr)
print(np.median(arr))
# 分位数
# --------------------
# 44 47 64 67
# 0.25 * 3 =0.75
# (47 - 44)*0.75 = 2.25 + 44 = 46.25
print(np.percentile(arr,50))
print(np.percentile(arr,100))
print(np.percentile(arr,25))
# 44 47 64 67
# 0.25 * 3 =0.75
# (47 - 44)*0.75 = 2.25 + 44 = 46.25
print(np.percentile(arr,80))
# --------------------
# 44 47 64 67
# 0.80 * 3 =2.4
# (67 - 64)*2.4 = 1.2 + 64 = 65.2
2.0
2.5
[44 47 64 67]
55.5
55.5
67.0
46.25
65.2
python
# 累积和 累积积
arr = np.array([1,2,3])
print(np.sum(arr)) #求和
print(np.cumsum(arr)) # 累积和
print(np.cumprod(arr)) # 累积积
6
[1 3 6]
[1 2 6]
比较函数
比较是否大于、小于、等于
逻辑与、或、非
检查数组中是否有一个True 是否所有的都为True 自定义条件
python
# 是否大于
print(np.greater([3,4,5,6,7],4))
print(np.less([3,4,5,6,7],4))
print(np.equal([3,4,5,6,7],4))
print(np.equal([3,4,5],[4,4,4]))
[False False True True True]
[ True False False False False]
[False True False False False]
[False True False]
python
# 逻辑与
print(np.logical_and([0,0],[1,1]))
print(np.logical_and([1,0],[1,1]))
print(np.logical_and([1,1],[1,1]))
print("-----------------------")
# 逻辑非
print(np.logical_not([1,0]))
print(np.logical_not([0,1]))
print("-----------------------")
# 逻辑
[False False]
[ True False]
[ True True]
-----------------------
[False True]
[ True False]
python
# 检查元素是否至少有一个元素为true
print(np.any([3,4,5,6,7]))
# 检查元素是否全部元素为true
print(np.all([3,4,0,6,7]))
True
False
python
# 自定义条件
# print(np.where(条件,符合条件,不符合条件))
arr = np.array([1,2,3,4,5])
print(np.where(arr>3,arr,0))
[0 0 0 4 5]
python
arr = np.array([1,2,3,4,5])
print(np.where(arr<3,1,0))
[1 1 0 0 0]
python
score = np.random.randint(50,100,20)
print(score)
print(np.where(score>=60,"及格","不及格"))
[85 95 98 56 94 77 99 75 70 95 50 63 58 65 96 65 67 52 89 66]
['及格' '及格' '及格' '不及格' '及格' '及格' '及格' '及格' '及格' '及格' '不及格' '及格' '不及格' '及格'
'及格' '及格' '及格' '不及格' '及格' '及格']
python
print(np.where(
score<60,'不及格',np.where(
score<80,'良好','优秀'
)
))
['优秀' '优秀' '优秀' '不及格' '优秀' '良好' '优秀' '良好' '良好' '优秀' '不及格' '良好' '不及格' '良好'
'优秀' '良好' '良好' '不及格' '优秀' '良好']
python
# np.select(条件,返回的结果) 必须要写 default = ''
print(np.select([score>80,(score>=60) & (score<=80),score<60],['优秀','良好','不及格'],default='未知'))
['优秀' '优秀' '优秀' '不及格' '优秀' '良好' '优秀' '良好' '良好' '优秀' '不及格' '良好' '不及格' '良好'
'优秀' '良好' '良好' '不及格' '优秀' '良好']
python
# 排序函数
np.random.seed(0)
arr = np.random.randint(0,100,20)
# print(arr)
# arr.sort()
print(arr)
print(np.sort(arr))
# 获取索引
print(np.argsort(arr))
print(arr)
[44 47 64 67 67 9 83 21 36 87 70 88 88 12 58 65 39 87 46 88]
[ 9 12 21 36 39 44 46 47 58 64 65 67 67 70 83 87 87 88 88 88]
[ 5 13 7 8 16 0 18 1 14 2 15 3 4 10 6 9 17 11 12 19]
[44 47 64 67 67 9 83 21 36 87 70 88 88 12 58 65 39 87 46 88]
python
# 去重函数
print(np.unique(arr))
[ 9 12 21 36 39 44 46 47 58 64 65 67 70 83 87 88]
python
# 数组的拼接
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
print(arr1+arr2)
print(np.concatenate((arr1,arr2)))
[5 7 9]
[1 2 3 4 5 6]
python
# 数组的分割 4等分
print(np.split(arr,4))
# 元素前面切一刀 分成四段
print(np.split(arr,[6,12,18]))
[array([44, 47, 64, 67, 67], dtype=int32), array([ 9, 83, 21, 36, 87], dtype=int32), array([70, 88, 88, 12, 58], dtype=int32), array([65, 39, 87, 46, 88], dtype=int32)]
[array([44, 47, 64, 67, 67, 9], dtype=int32), array([83, 21, 36, 87, 70, 88], dtype=int32), array([88, 12, 58, 65, 39, 87], dtype=int32), array([46, 88], dtype=int32)]
python
# 调整数组的性状 要求原数组数值的个数相等
print(np.reshape(arr,[2,10]))
[[44 47 64 67 67 9 83 21 36 87]
[70 88 88 12 58 65 39 87 46 88]]
python
# 调整数组的性状
print(np.reshape(arr,[5,4]))
[[44 47 64 67]
[67 9 83 21]
[36 87 70 88]
[88 12 58 65]
[39 87 46 88]]
案例
python
import numpy as np
# 莫城市一周最高气温为
temps = np.array([28,30,29,31,32,30,29])
print(temps)
print('平均气温:')
print('%.3f'%np.mean(temps))
# 最高气温
print('最高气温:')
print(np.max(temps))
# 最底气温
print('最底气温:')
print(np.min(temps))
[28 30 29 31 32 30 29]
平均气温:
29.857
最高气温:
32
最底气温:
28
python
# 气温超过30的天数
print("气温超过30的天数:")
print(temps[temps>30])
print(len(temps[temps>30]))
print(np.where(temps>30,1,0)) # 让大于30的都等于一
print(np.cumsum(np.where(temps>30,1,0))) # 累加和 累加上面的大于1的个数
print(np.cumsum(np.where(temps>30,1,0))[-1]) # 取累加和最后一个数
print(np.count_nonzero(temps>30)) # 非零计数
气温超过30的天数:
[31 32]
2
[0 0 0 1 1 0 0]
[0 0 0 1 2 2 2]
2
2
python
"""
题目二 学生成绩统计
"""
python
score = np.array([85,90,78,92,88])
print(score)
[85 90 78 92 88]
python
# 求平均分
print('平均分:',np.mean(score))
# 求中位数
print(np.sort(score))
print('中位数:',np.median(score))
print('标准差:%.3f'%np.std(score))
## 将成绩转换为(假设满分10分)
print(score/10)
平均分: 86.6
[78 85 88 90 92]
中位数: 88.0
标准差:4.883
[8.5 9. 7.8 9.2 8.8]
python
"""
题目三 矩阵运算
"""
A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
print(A+B)
print(A*B)
# 下面两个一样
print(A@B)
print(A.dot(B))
[[ 6 8]
[10 12]]
[[ 5 12]
[21 32]]
[[19 22]
[43 50]]
[[19 22]
[43 50]]
python
"""
题目四 随机数据生成
"""
# 生成一个 (3,4) 的随机整数数组,范围【0,10)
np.random.seed(0)
arr = np.random.randint(0,10,(3,4))
print(arr)
print("每列的最大值:",np.max(arr,axis=0)) # axis = 0 列 1 行
print("计算每行的最小值:",np.min(arr,axis=1))
[[5 0 3 3]
[7 9 3 5]
[2 4 7 6]]
每列的最大值: [7 9 7 6]
计算每行的最小值: [0 3 2]
python
# 将数组中的所有奇数替换为-1
print(np.where(arr%2==1,-1,arr))
# 所有 arr%2==1 的元素 = -1
arr[arr%2==1] = -1
print(arr)
[[-1 0 -1 -1]
[-1 -1 -1 -1]
[ 2 4 -1 6]]
[[-1 0 -1 -1]
[-1 -1 -1 -1]
[ 2 4 -1 6]]
python
"""
题目五 数组变形
"""
arr = np.arange(1,13)
print(arr)
[ 1 2 3 4 5 6 7 8 9 10 11 12]
python
# 改变性状
arr = np.reshape(arr,(3,4))
print(arr)
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
python
print('每行的和',np.sum(arr,axis=1))
print("每列的平均值",np.mean(arr,axis=0))
每行的和 [10 26 42]
每列的平均值 [5. 6. 7. 8.]
python
# 将数组展平为一维数组
print(np.reshape(arr,(12)))
[ 1 2 3 4 5 6 7 8 9 10 11 12]
python
"""
题目六
"""
np.random.seed(0)
arr = np.random.randint(0,20,(5,5))
print(arr)
[[12 15 0 3 3]
[ 7 9 19 18 4]
[ 6 12 1 6 7]
[14 17 5 13 8]
[ 9 19 16 19 5]]
python
# 找出数组大于10的元素
print(arr[arr>10])
# 将所有大于10的元素替换为0
arr[arr>10] = 0
print(arr)
[12 15 19 18 12 14 17 13 19 16 19]
[[0 0 0 3 3]
[7 9 0 0 4]
[6 0 1 6 7]
[0 0 5 0 8]
[9 0 0 0 5]]
python
"""
题目七 统计函数应用
"""
money = np.array([120,135,110,125,130,140])
print('总和',np.sum(money))
总和 760
python
print('平均值:',np.mean(money))
print('方差:',np.var(money))
平均值: 126.66666666666667
方差: 97.22222222222223
python
print('最高的月份:',np.argmax(money)+1)
print('最底的月份:',np.argmin(money)+1)
最高的月份: 6
最底的月份: 3
python
"""
题目八 数组拼接
"""
A = np.array([1,2,3])
B = np.array([4,5,6])
C = A+B
print(C)
D = np.concatenate((A,B),axis=0)
print(D)
print(np.reshape(D,(2,3)))
[5 7 9]
[1 2 3 4 5 6]
[[1 2 3]
[4 5 6]]
python
"""
题目九 唯一值与排序
"""
arr = np.array([2,1,2,3,1,4,3])
print(np.unique(arr)) # 使用的是时候就已经排好序了
u_arr,counts = np.unique(arr,return_counts=True)
print(u_arr)
print(counts)
print("-------------------")
d = []
for i in range(len(u_arr)):
# print(u_arr[i])
d=d+[len(arr[arr == u_arr[i]])]
print(d)
[1 2 3 4]
[1 2 3 4]
[2 2 2 1]
-------------------
[2, 2, 2, 1]
python
"""
综合应用题
"""
python
money = np.array([20,25,22,30,28]) # 销售额
a = np.array([15,18,16,22,20]) # 成本
# 计算每天的利润 (销售额 - 成本)
print('每日的利润:',money - a)
b = money -a
print('利润的平均值',np.mean(b))
print('利润的标准差',np.std(b))
# 找到利润最高的天数
print("利润最高的天数",len(b[b == np.max(b)]))
每日的利润: [5 7 6 8 8]
利润的平均值 6.8
利润的标准差 1.16619037896906
利润最高的天数 2