Numpy学习篇

一、numpy

1.ndarry的特性

多维性

python 复制代码
import numpy as np
from numpy.ma.core import arange
python 复制代码
arr = np.array(5) #创建0维的ndarray数组
print(arr)
print('arr的维度是:',arr.ndim) #数组的维度 number of dimension
复制代码
5
arr的维度是: 0
python 复制代码
arr = np.array([1,2,3]) #创建1维的ndarray数组
print(arr)
print('arr的维度是:',arr.ndim) #数组的维度 number of dimension
复制代码
[1 2 3]
arr的维度是: 1
python 复制代码
arr = np.array([[1,2,3],[4,5,6]]) #创建0维的ndarray数组
print(arr)
print('arr的维度是:',arr.ndim) #数组的维度 number of dimension
复制代码
[[1 2 3]
 [4 5 6]]
arr的维度是: 2

同质性

python 复制代码
arr = np.array([1,'hello']) #不同的数据类型会被强制转换成相同的数据类型
print(arr)
复制代码
['1' 'hello']
python 复制代码
arr = np.array([1,2.5]) #不同的数据类型会被强制转换成相同的数据类型
print(arr)
复制代码
[1.  2.5]

2.ndarray的属性

python 复制代码
arr = np.array(1) # 0维数组
print(arr)
print('数组的形状:',arr.shape)
print('数组的维度:',arr.ndim)
print('元素的个数:',arr.size)
print('元素的数据类型:',arr.dtype)
print('元素的转置:',arr.T)
复制代码
1
数组的形状: ()
数组的维度: 0
元素的个数: 1
元素的数据类型: int64
元素的转置: 1
python 复制代码
arr = np.array([1,2,3]) # 1维数组
print(arr)
print('数组的形状:',arr.shape)
print('数组的维度:',arr.ndim)
print('元素的个数:',arr.size)
print('元素的数据类型:',arr.dtype)
print('元素的转置:',arr.T)
复制代码
[1 2 3]
数组的形状: (3,)
数组的维度: 1
元素的个数: 3
元素的数据类型: int64
元素的转置: [1 2 3]
python 复制代码
arr = np.array([[1,2,3],[4,5,6]]) # 2维数组
print(arr)
print('数组的形状:',arr.shape)
print('数组的维度:',arr.ndim)
print('元素的个数:',arr.size)
print('元素的数据类型:',arr.dtype)
print('元素的转置:',arr.T)

3.ndarray的创建

python 复制代码
# 基础的创建方法
list1 = [4,5,6]
arr = np.array(list1,dtype=np.float64) #np.array的参数就是列表,dtype用来指定数据类型
print('数组的维度:',arr.ndim)
print(arr)
复制代码
数组的维度: 1
[4. 5. 6.]
python 复制代码
# copy数组
arr1 = np.copy(arr) #元素跟原始的相同,但是不是同一个数组了
print(arr1)
arr1[0] = 8
print(arr1)
print(arr)
复制代码
[4. 5. 6.]
[8. 5. 6.]
[4. 5. 6.]
python 复制代码
# 预定义形状
# 全0    全1  未初始化    固定值
# 全0
arr = np.zeros((2,3),dtype=int)    #预定义一个 2 行 3 列的全 0 二维数组,默认是浮点数类型,dtype=指定数据类型
print(arr)
print(arr.dtype)
复制代码
[[0 0 0]
 [0 0 0]]
int64
python 复制代码
arr = np.zeros((10),dtype=int)    #预定义一个全 0 一维数组,默认是浮点数类型,dtype=指定数据类型
print(arr)
复制代码
[0 0 0 0 0 0 0 0 0 0]
python 复制代码
# 全1
arr = np.ones((5,8),dtype=int)
print(arr)
复制代码
[[1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1]]
python 复制代码
# 未初始化
arr = np.empty((2,3))   #里面的值随机,执行效率更快,但不推荐
print(arr)
复制代码
[[0. 0. 0.]
 [0. 0. 0.]]
python 复制代码
arr = np.empty((5,8))   #里面的值随机
print(arr)
复制代码
[[5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324]
 [5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324]
 [5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324]
 [5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324]
 [5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324 5.e-324]]
python 复制代码
# 指定其他数值的预定义形状的数组
arr = np.full((2,3),2025)
print(arr)
复制代码
[[2025 2025 2025]
 [2025 2025 2025]]
python 复制代码
arr1 = np.zeros_like(arr)   #定义一个形状跟 arr 一样的全0数组
print(arr1)
arr1 = np.empty_like(arr)   #定义一个形状跟 arr 一样的未初始化数组
print(arr1)
arr1 = np.ones_like(arr)   #定义一个形状跟 arr 一样的全1数组
print(arr1)
arr1 = np.full_like(arr,2026)   #定义一个形状跟 arr 一样的指定数值数组
print(arr1)
复制代码
[[0 0 0]
 [0 0 0]]
[[0 0 0]
 [0 0 0]]
[[1 1 1]
 [1 1 1]]
[[2026 2026 2026]
 [2026 2026 2026]]
python 复制代码
# 等差数列去创建数组
arr = np.arange(1,10,2)    # satart,end,step(步长),注意不包括end
print(arr)
复制代码
[1 3 5 7 9]
python 复制代码
# 等间隔数列
arr = np.linspace(0,100,5,dtype=int)  # start,end,份数
print(arr)
# 跟以下效果相同
arr = np.arange(0,101,25)    # satart,end,step(步长),注意不包括end
print(arr)
复制代码
[  0  25  50  75 100]
[  0  25  50  75 100]
python 复制代码
# 对数间隔数列
arr = np.logspace(0,4,3,base=2) # start,end,份数,底(不写的话默认10为底)
print(arr)  # 2的0次方,2的2次方,2的4次方
复制代码
[ 1.  4. 16.]
python 复制代码
# 可以先求出每一份的指数
arr = np.linspace(0,4,3)
print(arr)
复制代码
[0. 2. 4.]
python 复制代码
# 然后根据base求出对应的对数间隔数列
arr = np.logspace(0,4,3,base=2)
print(arr)
复制代码
[ 1.  4. 16.]
python 复制代码
# 特殊矩阵
# 单位矩阵:主对角线上的数字为1,其他的数字为0
# arr = np.eye(3,dtype=int)   #默认创建一个3行3列的单位矩阵
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([1,2,3,4])
print(arr)
复制代码
[[1 0 0 0]
 [0 2 0 0]
 [0 0 3 0]
 [0 0 0 4]]
python 复制代码
# 随机数组的生成
# 生成0到1之间的随机浮点数(均匀分布)
arr = np.random.rand(2,3)   # 2行3列
print(arr)
复制代码
[[0.70317436 0.57025222 0.0601977 ]
 [0.91897225 0.91744315 0.37134452]]
python 复制代码
# 生成指定范围区间的随机浮点数
arr = np.random.uniform(3,6,(2,3))  # start,end,(形状)
print(arr)
复制代码
[[3.20459793 3.64600605 4.01665429]
 [5.28415385 4.62987287 5.19604319]]
python 复制代码
# 生成指定范围区间的随机整数
arr = np.random.randint(3,30,(2,3))  # start,end,(形状)
print(arr)
复制代码
[[19 18 11]
 [26  3 10]]
python 复制代码
# 生成随机数列(正态分布)(大部分是-3到3之间,取到0附近的值的概率较大)
# 两边概率小,中间概率大。eg:成年人身高一米六以下和两米以上的偏少,一米七的偏多
arr = np.random.randn(2,3)
print(arr)
复制代码
[[-0.31779482  0.41740706  1.42661521]
 [-1.61462848 -0.74389413 -0.60266806]]
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 unit

浮点数 float

复数 complex

python 复制代码
arr = np.array([1,0,127,0],dtype=bool)  #或者 dtype=np.bool
print(arr)
复制代码
[ True False  True False]
python 复制代码
arr = np.array([1,0,1000,0],dtype=int) #不用担心范围问题
print(arr)
复制代码
[   1    0 1000    0]
python 复制代码
arr = np.array([1,0,127,0],dtype=np.int8)   #注意只能写 -128到127的范围的值
print(arr)

5.索引与切片

python 复制代码
# 一维数组的索引与切片
arr = np.random.randint(1,100,20)   # start,end,份数
python 复制代码
print(arr)
复制代码
[17 63 17  8 99  7 27 14 76 59 26  4 75 76 62 78 84 58 95 33]
python 复制代码
print(arr[0])
print(arr[:]) #获取全部元素
print(arr[2:5]) # 获取左闭右开区间的所有元素
print(arr[slice(2,15,3)])   # 切片,start,end,step ,同上条语句差不多
print(arr[ (arr>10) & (arr<70) ])   # 布尔索引,获取arr数组里 >10 & <70 的数据,支持 & 、 | 逻辑运算符
复制代码
17
[17 63 17  8 99  7 27 14 76 59 26  4 75 76 62 78 84 58 95 33]
[17  8 99]
[17  7 76  4 62]
[17 63 17 27 14 59 26 62 58 33]
python 复制代码
# 二维数组的索引和切片
arr = np.random.randint(1,100,(4,8))
print(arr)
复制代码
[[11  7 76 19  4 78 18 44]
 [17 19 80 91 60 72 76 30]
 [46  7 64 79 25 19 94 34]
 [79 43 95  4 19 71 53 23]]
python 复制代码
print(arr[1,3]) # ,逗号分隔行和列索引
print(arr[1,2:5])   # 获取第1行第2到4列的元素(索引从0开始)
print(arr[0:2,2:5]) # 获取第0到1行,2到4列的元素
print(arr[2],[ arr[2] >50]) #获取第2行,且第2行中大于50的元素
print(arr[2,:],[ arr[2] >50]) #获取第2行,且第2行中大于50的元素
print(arr[:,3]) #获取第3列的所有元素

6.ndarray的运算

python 复制代码
# 算术运算(对应位置进行算术操作)
# 一维数组之间的算术运算
a = np.array([1,2,3])
b = np.array([4,5,6])
print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(a**2)
复制代码
[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4  0.5 ]
[1 4 9]
python 复制代码
# 原生的python列表是不支持直接运算的
c = [1,2,3]
d = [4,5,6]
# print(c+d) # 把两个列表拼接起来了:[1, 2, 3, 4, 5, 6]
for i in range(len(c)):
    d[i] = d[i] + c[i]
print(d)
复制代码
[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],[9,10,11]])
print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(a**2)
复制代码
[[ 5  7  9]
 [11 13 15]
 [16 18 20]]
[[-3 -3 -3]
 [-3 -3 -3]
 [-2 -2 -2]]
[[ 4 10 18]
 [28 40 54]
 [63 80 99]]
[[0.25       0.4        0.5       ]
 [0.57142857 0.625      0.66666667]
 [0.77777778 0.8        0.81818182]]
[[ 1  4  9]
 [16 25 36]
 [49 64 81]]
python 复制代码
# 数组与数字之间的算术运算
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a+3)  # 数组的每一个元素都 +3
print(a-3)
print(a*3)
复制代码
[[ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
[[-2 -1  0]
 [ 1  2  3]
 [ 4  5  6]]
[[ 3  6  9]
 [12 15 18]
 [21 24 27]]
python 复制代码
# 广播机制:1.获取形状 2.是否可广播
# 同一维度(行/列):相同长度、或其中一个为1
a = np.array([1,2,3]) # 1*3
b = np.array([[4],[5],[6]]) #3*1
print(b-a)
'''
a (扩展成3行,因为b为3行)
1 2 3
1 2 3
1 2 3

b (扩展成3列,因为a为3列)
4 4 4
5 5 5
6 6 6

最后数组对应位置进行算术运算
'''
复制代码
[[3 2 1]
 [4 3 2]
 [5 4 3]]





'\na (扩展成3行,因为b为3行)\n1 2 3\n1 2 3\n1 2 3\n\nb (扩展成3列,因为a为3列)   \n4 4 4\n5 5 5\n6 6 6\n\n最后数组对应位置进行算术运算\n'
python 复制代码
# 错误示例:不能广播
a = np.array([1,2,3]) #1*3
b = np.array([4,5])   #1*2
python 复制代码
# 矩阵运算
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[4,5,6],[7,8,9],[9,10,11]])
print(a @ b)    #与普通乘法对应位置相乘不同(可去了解线性代数矩阵的乘法)
复制代码
[[ 45  51  57]
 [105 120 135]
 [165 189 213]]

二、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 = y
print(np.exp(1))    #默认以 e 为底
复制代码
2.718281828459045
python 复制代码
# 计算自然对数    ln y = x
print(np.log(2.71)) #默认以 e 为底
复制代码
0.9969486348916096
python 复制代码
# 计算正弦值、余弦值
print(np.sin(np.pi/2))
print(np.cos(np.pi))
复制代码
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,2))
复制代码
[1 1 4 9]
python 复制代码
# 四舍五入
print(np.round([3.2,4.5,8.1,9.6]))  # 解释4.5->4.  四舍六入,五靠偶
复制代码
[ 3.  4.  8. 10.]
python 复制代码
# 向上取整,向下取整
arr = np.array([1.6,25.1,81.7])
print(np.ceil(arr))
print(np.floor(arr))
复制代码
[ 2. 26. 82.]
[ 1. 25. 81.]
python 复制代码
# 检测缺失值NaN
np.isnan([1,2,np.nan,3])
复制代码
array([False, False,  True, False])

2.统计函数

求和、计算平均值、计算中位数、标准差、方差

查找最大值、最小值

计算分位数、累计和、累积差

python 复制代码
arr = np.random.randint(1,20,8)
print(arr)
复制代码
[ 5  9 17 17 11  7 10  1]
python 复制代码
# 求和
print(np.sum(arr))
复制代码
77
python 复制代码
# 计算平均值
print(np.mean(arr))
复制代码
9.625
python 复制代码
# 计算中位数
# 奇数:排序后中间的数值
# 偶数:中间的两个数的平均值
print(np.median([4,1,2]))
print(np.median([1,2,5,6]))
复制代码
2.0
3.5
python 复制代码
# 计算方差、标准差
# 1,2,3 的平均值为 2
# 方差:用来计算数据的离散程度:( (1-2)^2 + (2-2)^2 + (3-2)^2 ) / 3 =0.6666
# 标准差:sqrt(方差)
print(np.var(arr))
print(np.var([1,2,3]))  #方差
print(np.std([1,2,3]))  #标准差
复制代码
26.734375
0.6666666666666666
0.816496580927726
python 复制代码
# 计算最大值、最小值
print(arr)
print(np.max(arr),np.argmax(arr))   #np.argmax(arr) 最大值索引
print(np.min(arr),np.argmin(arr))
复制代码
[ 5  9 17 17 11  7 10  1]
17 2
1 7
python 复制代码
# 分位数
print(np.percentile(arr,25)) # 前25%
复制代码
6.5
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]

3.比较函数

比较是否大于、小于、等于

逻辑与、或、非

检查数组中是否有一个True,是否所有的都为True,自定义条件

python 复制代码
# 是否大于
print(np.greater([3,4,5,6,7],4))
# 是否小于
print(np.less([3,4,5,6,7,8],4))
# 是否等于
print(np.equal([3,4,5,6,7,8],4))
print(np.equal([3,4,5],[4,4,4]))    #对应位置数值相比较,前提要保证矩阵形状相同
复制代码
[False False  True  True  True]
[ True False False False False False]
[False  True False False False False]
python 复制代码
# 逻辑与、或、非
print(np.logical_and([0,1],[1,1]))  # 判断两个列表对应位置的数字中是否存在非0
print(np.logical_or([0,0],[1,0]))
print(np.logical_not([1,0])) #逻辑非:只对应一个矩阵来计算的
复制代码
[False  True]
[ True False]
[False  True]
python 复制代码
# 检查元素是否至少有一个为True
print(np.any([0,0,0,0,0]))  # False
print(np.any([0,0,0,0,1]))  # True
#检查是否全部元素为True
print(np.all([0,0,0,1])) # False
print(np.all([1,1,1,1])) # True
复制代码
False
True
False
True
python 复制代码
# 自定义条件
# print(np.where(条件,符合条件,不符合条件)
arr = np.array([1,2,3,4,5])
print(np.where(arr<3,arr,0))
复制代码
[1 2 0 0 0]
python 复制代码
arr = np.array([1,2,3,4,5])
print(np.where(arr<3,1,0))  # 也可用0,1做分类
复制代码
[1 1 0 0 0]
python 复制代码
# 实践
score = np.random.randint(50,100,20)
print(score)
print(np.where(score>=60,"及格","不及格"))
复制代码
[87 54 93 68 59 64 87 85 61 91 73 79 83 52 69 72 95 71 70 70]
['及格' '不及格' '及格' '及格' '不及格' '及格' '及格' '及格' '及格' '及格' '及格' '及格' '及格' '不及格'
 '及格' '及格' '及格' '及格' '及格' '及格']
python 复制代码
# 嵌套使用
print(np.where(score<60,"不及格",np.where(
        score<80,"良好","优秀"
    )
))
复制代码
['优秀' '不及格' '优秀' '良好' '不及格' '良好' '优秀' '优秀' '良好' '优秀' '良好' '良好' '优秀' '不及格'
 '良好' '良好' '优秀' '良好' '良好' '良好']
python 复制代码
# np.select(条件,返回的结果) ===  同where嵌套使用
print(np.select([score>80,(score>=60) & (score <=80),score<60],['优秀','良好','不及格'],default='未知'))
复制代码
['优秀' '不及格' '优秀' '良好' '不及格' '良好' '优秀' '优秀' '良好' '优秀' '良好' '良好' '优秀' '不及格'
 '良好' '良好' '优秀' '良好' '良好' '良好']
python 复制代码
# 排序函数
np.random.seed(0) # 设置随机种子,保证每次运行数据都不会变
arr = np.random.randint(1,100,20)
print(arr)
# arr.sort()  # 原数组会改变
# print(arr)
print(np.sort(arr))    #原数组不会改变
print(np.argsort(arr)) #打印排序后元素对应的索引位置
print(arr)
复制代码
[45 48 65 68 68 10 84 22 37 88 71 89 89 13 59 66 40 88 47 89]
[10 13 22 37 40 45 47 48 59 65 66 68 68 71 84 88 88 89 89 89]
[ 5 13  7  8 16  0 18  1 14  2 15  3  4 10  6  9 17 11 12 19]
[45 48 65 68 68 10 84 22 37 88 71 89 89 13 59 66 40 88 47 89]
python 复制代码
# 去重函数(去重的同时进行排序了)
print(np.unique(arr))
复制代码
[10 13 22 37 40 45 47 48 59 65 66 68 71 84 88 89]
python 复制代码
# 数组的拼接
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
print(np.concatenate((arr1,arr2)))  # 数组拼接
print(arr1+arr2)    #数组对应值相加
复制代码
[1 2 3 4 5 6]
[5 7 9]
python 复制代码
# 数组的分割
print(np.split(arr,4)) # 切成 4 等份 ,必须确保是等分的,否则会报错
print(np.split(arr,[6,12,18])) # [6,12,18]:切割的索引位置
复制代码
[array([45, 48, 65, 68, 68], dtype=int32), array([10, 84, 22, 37, 88], dtype=int32), array([71, 89, 89, 13, 59], dtype=int32), array([66, 40, 88, 47, 89], dtype=int32)]
[array([45, 48, 65, 68, 68, 10], dtype=int32), array([84, 22, 37, 88, 71, 89], dtype=int32), array([89, 13, 59, 66, 40, 88], dtype=int32), array([47, 89], dtype=int32)]
python 复制代码
# 调整数组的形状(也要求等分)
print(np.reshape(arr,[2,10]))
# print(np.reshape(arr,(2,10)))
复制代码
[[45 48 65 68 68 10 84 22 37 88]
 [71 89 89 13 59 66 40 88 47 89]]

3.numpy科学计算综合练习

python 复制代码
'''
题目 1:温度数据分析
某城市一周的最高气温℃为 [28,30,29,31,32,30,29]。
- 计算平均气温、最高气温和最低气温。
- 找出气温超过 30℃ 的天数
'''
python 复制代码
import numpy as np
arr = np.array([28,30,29,31,32,30,29])
# print("平均气温:",np.average(arr))
print("平均气温:","%.3f"%np.mean(arr)) #保留3位小数
print("最高气温:",np.max(arr))
print("最低气温:",np.min(arr))
print("气温超过30℃的天数:",len(arr[arr>30]))   #布尔索引
print("气温超过30℃的天数:",np.cumsum(np.where(arr>30,1,0))[-1])
print("气温超过30℃的天数:",np.count_nonzero(arr>30))
复制代码
平均气温: 29.857
最高气温: 32
最低气温: 28
气温超过30℃的天数: 2
气温超过30℃的天数: 2
气温超过30℃的天数: 2
python 复制代码
'''
题目 2:学生成绩提及
某班级 5 名学生的数学成绩为 [85,90,78,92,88]
- 计算成绩的平均分、中位数和标准差
- 将成绩转换为(假设满分为10分)后的成绩
'''
python 复制代码
score = np.array([85,90,78,92,88])
print('平均分为:',np.mean(score))
print('中位数为:',np.median(score))
print('标准差为:','%.3f'%np.std(score))
print("转换后的成绩为:",score / 10)
复制代码
平均分为: 86.6
中位数为: 88.0
标准差为: 4.883
转换后的成绩为: [8.5 9.  7.8 9.2 8.8]
python 复制代码
'''
题目 3:矩阵运算
给定矩阵 A = [[1,2],[3,4]] 和 B = [[5,6],[7,8]]
- 计算 A + B 和 A * B (逐元素乘法)
- 计算 A 和 B 的矩阵乘法 (点积)
'''
python 复制代码
A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
print("A+B=",A+B)
print("A*B=",A*B)   #逐元素乘法
print("A@B=",A@B)   #点积,矩阵乘法
print("A@B=",np.dot(A,B))   #点积,矩阵乘法
复制代码
A+B= [[ 6  8]
 [10 12]]
A*B= [[ 5 12]
 [21 32]]
A@B= [[19 22]
 [43 50]]
A@B= [[19 22]
 [43 50]]
python 复制代码
'''题目 4:随机数组生成
生成一个 (3,4) 的随机整数数组,范围 [0,10)
- 计算每列的最大值和每行的最小值
- 将数组中的所有奇数替换为 -1
'''
python 复制代码
np.random.seed(0)
arr = np.random.randint(0,10,(3,4))
print(arr)
print('每列的最大值:',np.max(arr,axis=0))    # axis=0,列   axis=1,行
print('每行的最小值:',np.min(arr,axis=1))
print('将奇数替换成-1后的矩阵为:')
print(np.where(arr%2==1,-1,arr))
# arr[arr%2==1]=-1  一样的效果
# print(arr)
复制代码
[[5 0 3 3]
 [7 9 3 5]
 [2 4 7 6]]
每列的最大值: [7 9 7 6]
每行的最小值: [0 3 2]
将奇数替换成-1后的矩阵为:
[[-1  0 -1 -1]
 [-1 -1 -1 -1]
 [ 2  4 -1  6]]
python 复制代码
'''
题目 5:数组得到变形
创建一个 1 到 12 的一维数组,并转换为 (3,4)的二维数组
- 计算每行的和与每列的平均值
- 将数组展平为一堆数组
'''
python 复制代码
arr = np.arange(1,13)
print(arr)
arr = np.reshape(arr,(3,4))
print(arr)
print('每行的和为:',np.sum(arr,axis=1))
print('每列的平均值为:',np.mean(arr,axis=0))
print('展平的数组为:',np.reshape(arr,(12)))
复制代码
[ 1  2  3  4  5  6  7  8  9 10 11 12]
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
每行的和为: [10 26 42]
每列的平均值为: [5. 6. 7. 8.]
展平的数组为: [ 1  2  3  4  5  6  7  8  9 10 11 12]
python 复制代码
'''
题目 6:布尔索引
生成一个 (5,5) 的随机数组,范围 [0,20)
- 找出数组中大于 10 的元素
- 将所有大于 10 的元素替换为 0
'''
python 复制代码
np.random.seed(0)
arr = np.random.randint(0,20,(5,5))
print(arr)
print('数组中大于10的元素:',arr[arr>10])    #布尔索引
# print('将大于10的元素替换为0:',np.where(arr>10,0,arr))
print('将大于10的元素替换为0:')
arr[arr>10] = 0
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]]
数组中大于10的元素: [12 15 19 18 12 14 17 13 19 16 19]
将大于10的元素替换为0:
[[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 复制代码
'''
题目 7:统计函数应用
某公司 6 个月的销售额 (万元) 为 [120,135,110,125,130,140]
- 计算销售额的总和、均值和方差
- 找出销售额最高的月份和最低的月份
'''
python 复制代码
arr = np.array([120,135,110,125,130,140])
print('销售额的总和为:',np.sum(arr))
print('销售额的均值为:',np.mean(arr))
print('销售额的方差为:',np.var(arr))
print('销售额最高的月份为:',np.argmax(arr)+1)
print('销售额的最低的月份为:',np.argmin(arr)+1)
复制代码
销售额的总和为: 760
销售额的均值为: 126.66666666666667
销售额的方差为: 97.22222222222223
销售额最高的月份为: 6
销售额的最低的月份为: 3
python 复制代码
'''
题目 8:数组的拼接
给定 A = [1,2,3] 和 B = [4,5,6]
- 将 A 和 B 水平拼接为一个新数组
- 将 A 和 B 垂直拼接为一个新数组
'''
python 复制代码
A = np.array([1,2,3])
B = np.array([4,5,6])
C= np.concatenate((A,B))
print('水平拼接:',C)
C = np.reshape(C,(2,3))
print('垂直拼接:',C)
复制代码
水平拼接: [1 2 3 4 5 6]
垂直拼接: [[1 2 3]
 [4 5 6]]
python 复制代码
'''
题目 9:唯一值与排序
给定数组 [2,1,2,3,1,4,3]
- 找出数组中的唯一值并排序
- 计算每个唯一值出现的次数
'''
python 复制代码
arr = np.array([2,1,2,3,1,4,3])
u_arr,counts = np.unique(arr,return_counts=True)  # 同时返回唯一值数组和每一个唯一值出现的次数
print(u_arr)
print(counts)
# 打印唯一值出现的次数(循环法)
# d = []
# for i in range(len(u_arr)):
#     d = d + [len(arr[arr==u_arr[i]])]
print(d)
复制代码
[1 2 3 4]
[2 2 2 1]
[2, 2, 2, 1]
python 复制代码
'''
题目 10:综合应用
某商店 5 天的销售额(万元)和成本(万元)如下:
销售额:[20,25,22,30,28]
成本:[15,18,16,22,20]
- 计算每天的利润(销售额 - 成本)
- 计算利润的平均值和标准差
- 找出利润最高的天数
'''
python 复制代码
turnover = np.array([20,25,22,30,28])
cost = np.array([15,18,16,22,20])
money = turnover-cost
print('每天的利润:',money)
print('利润的平均值:',np.mean(money))
print('利润的标准差:',np.std(money))
print('利润最高的天数:',len(money[money==np.max(money)]))
复制代码
每天的利润: [5 7 6 8 8]
利润的平均值: 6.8
利润的标准差: 1.16619037896906
利润最高的天数: 2
相关推荐
Elaine3362 小时前
深度实战:基于 Scrapy CrawlSpider 的全自动化教程采集系统
python·scrapy·自动化·网络爬虫
我的xiaodoujiao2 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 37--测试报告 Allure 前置步骤-配置安装 JDK 详细图文教程
java·开发语言·学习·测试工具
紫小米2 小时前
Qwen微调医疗模型(学习笔记)
笔记·学习
2401_841495642 小时前
【游戏开发】登山赛车
数据结构·python·游戏·游戏开发·pygame·登山赛车游戏·游戏打包发布
小明和大树2 小时前
JAVA 学习笔记 三
java·笔记·学习
心无旁骛~2 小时前
[SO101]在Jetson AGX Thor 上训练和部署GROOT N1.5模型
python·机器人
Heath0332 小时前
BGE-M3个人理解
python·算法
糕......2 小时前
Java IO流:数据传输的艺术与机制
java·开发语言·网络·学习
栗少2 小时前
the-science-of-storytelling
学习