掌握NumPy:ndarray核心特性与创建

一、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
相关推荐
Yue丶越2 小时前
【C语言】深入理解指针(三)
c语言·开发语言
luoganttcc2 小时前
已知 空间 三个 A,B C 点 ,求 顺序 经过 A B C 三点 圆弧 轨迹 ,给出 python 代码 并且 画出图像
c语言·开发语言·python
今天的砖很烫2 小时前
ThreadLocal 结构设计的精妙之处
java·开发语言
Q_Q5110082852 小时前
python+django/flask的图书馆管理系统vue
spring boot·python·django·flask·node.js·php
cwh_rs_giser3 小时前
如何高效设置机器学习超参数?——借鉴成熟AutoML框架的实践
人工智能·python·机器学习
逻极3 小时前
Scikit-learn 入门指南:从零到一掌握机器学习经典库(2025 最新版)
人工智能·python·机器学习·ai·scikit-learn·agent
麦麦鸡腿堡3 小时前
Java_HashMap底层机制与原码解读
java·开发语言·jvm
草莓熊Lotso3 小时前
C++ 抽象类与多态原理深度解析:从纯虚函数到虚表机制(附高频面试题)
java·运维·服务器·开发语言·c++·人工智能·笔记
再玩一会儿看代码3 小时前
Ken的Java学习之路——Java中关于面向对象
java·开发语言·经验分享·python·学习