当前位置: 首页 > news >正文

NPM(更新中)

numpy

tips:

image

核心特性

  • 多维性:支持0维,1维,2维及更高维数组
arr = np.array(5) # 创建0维数组
arr = np.array([1,2,3]) # 创建1维数组
arr = np.array([[1,2,3],[4,5,6]]) # 创建2维数组
arr.ndim # 数组的维度
  • 同质性:所有元素类型必须一致(通过dtype指定)
arr = np.array([1,'123']) # 不同数据类型会被强制转换成相同数据类型
arr = np.array([1,1.5]) 
arr

\(output\):
array(['1', '123'] array([1. , 1.5])

  • 高效性:基于连续内存块存储,支持向量化运算

属性

  1. \(shape\):数组的形状(行数/列数)
  2. \(ndim\):维度数量
  3. \(size\):总元素个数
  4. \(dtype\):数组中元素的类型
  5. \(T\):转置(行变列,列变行)
  6. \(itemsize\):单个元素占用的内存字节数
  7. \(nbytes\):数组总内存占用量
  8. \(flags\):内存存储方式(是否连续存储)

ndarray的创建

基础创建方式

# 基础创建方式
list1 = [1,2,3]
arr = np.array(list1,dtype = int)
print(arr.ndim)
arr

copy

arr1 = np.copy(arr) # 元素跟原始的数组相同,但不是同一个数组
arr1[0] = 8
print(arr1)
print(arr)

预定义形状

# 预定义形状
# 全0  全1 未初始化 固定值
# 全0
arr = np.zeros((2,3))# 全1
arr = np.ones((2,3),dtype = int)
print(arr)# 未初始化(值随机)
arr = np.empty((2,3))
print(arr)# 固定值
arr = np.full((3,4),2,dtype = int)
print(arr)# 规定形状与谁一样
arr1 = np.zeros_like(arr)
arr1 = np.empty_like(arr)
arr1 = np.full_like(arr,2025,dtype = int)
arr1

等差数列

arr = np.arange(1,12,2).reshape(3,2)
arr

\(op\):

array([[ 1,  3],[ 5,  7],[ 9, 11]])

等间隔数列

# 等间隔数列
app = np.linspace(0,100,5)
app

\(op\):

array([  0.,  25.,  50.,  75., 100.])

对数间隔数列

# 对数间隔
arr = np.logspace(0,4,3,base = 2)
arr

\(op\):

array([ 1.,  4., 16.])

base表示以几为底,0-4 分成3份

单位矩阵

# 特殊矩阵
# 单位矩阵:主对角线上的数字为1,其他数字为0
arr = np.eye(3) # 3行3列
arr# 非单位矩阵
arr = np.eye(3,4,dtype=int) # 3行4列
print(arr)

\(op\):

[[1 0 0][0 1 0][0 0 1][[1 0 0 0][0 1 0 0][0 0 1 0]]

对角矩阵

# 对角矩阵 主对角线上非零,其他数字为0
arr = np.diag([1,2,3])
print(arr)

\(op\):

[[1 0 0][0 2 0][0 0 3]]

随机数组

# 随机数组的生成
# 生成0-1之间的随机浮点数(均匀分布)
arr = np.random.rand(2,3)
print(arr)# 生成指定范围区间的随机浮点数
arr = np.random.uniform(3,6,(2,3))
print(arr)# 生成指定范围区间的随机整数
arr = np.random.randint(3,6,(2,3))
print(arr)# 生成随机数列(正态分布)
# 两边概率小,中间概率大
# -3 ~ 3 之间
arr = np.random.randn(2,3)
print(arr)# 随机种子
# 每次运行随机的结果一样
np.random.seed(20)
arr = np.random.randint(1,10,(2,5))
print(arr)

\(op\):

[[0.03662698 0.05935025 0.96815315][0.93762998 0.32943142 0.73241407]][[3.78802835 5.67615818 4.12618184][4.06410551 5.52066818 4.71513323][[4 3 4][4 5 5]][[ 0.99595732 -0.01888541 -0.43937749][-0.08584057  1.55598342  1.8797463 ]][[4 5 7 8 3][1 7 9 6 4]]

ndarray数据类型

image


索引与切片

一维数组

arr = np.random.randint(1,100,20)
# 基本索引
print(arr[0])
print(arr[1])# 切片(左闭右开)
print(arr[:]) # 全部
print(arr[:5]) # 0 ~ 4索引
print(arr[2:5]) # 2 ~ 4
print(arr[1:]) # 1 ~ 到最后# 布尔索引
print(arr[arr > 10]) # 打印arr中大于10的所有元素
print(arr[(arr > 10) & (arr < 70)]) # 打印arr中大于10小于70的所有元素# slice
# 与切片作用完全一样,这个只不过是用函数里面传参数
arr[slice(2,5)] # 2 ~ 4下标元素
print(arr[slice(0,6,3)]) # 0 ~ 5 步长为3

二维数组

arr = np.random.randint(1,100,(4,8))# 基础索引
print(arr[1][2]) # 2行3列
print(arr[0][0]) # 1行1列# 切片
print(arr[:3,:2]) # 0 ~ 2行 0 ~ 1列
print(arr[1:3,2:5]) # 1 ~ 2行 2 ~ 4列# 布尔索引
print(arr[arr > 40]) # 转换成1维列表
print(arr[2][arr[2] > 50]) # 2行中大于50的元素
print(arr[:,3][arr[:,3] > 10]) # 3列中大于10的元素

ndarray运算

数组与数组之间运算:

# np数组运算 
# 一维
a = np.array([1,2,3])
b = np.array([4,5,6])
print(a + b)
print(a - b)
print(a * b)
print(a / b)#二维
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[4,5,6],[7,8,9]])
print(a + b)
print(a - b)
print(a * b)
print(a / b)# 原生py
c = [1,2,3]
d = [4,5,6]
print(c + d)

\(op\):

[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4  0.5 ][[ 5  7  9][11 13 15]]
[[-3 -3 -3][-3 -3 -3]]
[[ 4 10 18][28 40 54]]
[[0.25       0.4        0.5       ][0.57142857 0.625      0.66666667]][1, 2, 3, 4, 5, 6]

数字与数组的运算

# 数组与标量之间的算数运算
a = np.array([[1,2,3],[4,5,6]])
print(a + 3)
print(a * 3)

\(op\):

[[4 5 6][7 8 9]]
[[ 3  6  9][12 15 18]]

数组中每个元素都加上/乘数字

广播机制(不同形状数组之间的运算)

  1. 先看同一维度 如果相同/有一个为1 便可以广播
  2. 如何广播:
    [1 2 3] -> [[1,2,3],[1,2,3],[1,2,3]]
    [[4],[5],[6]] -> [[4,4,4],[5,5,5],[6,6,6]]
  3. 同形状之后进行运算
a = np.array([1,2,3])
b = np.array([[4],[5],[6]])
print(a + b)
print(a - b)op:
[[5 6 7][6 7 8][7 8 9]]
[[-3 -2 -1][-4 -3 -2][-5 -4 -3]]

1 * 3和1 * 2就不可以广播


矩阵运算

# 矩阵运算
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)op:
[[ 21  27  33][ 57  72  87][ 93 117 141]]

基本数学函数

# 计算平方根
print(np.sqrt(9))
print(np.sqrt([1,4,9]))# 计算指数 以e^x为底
print(np.exp(1))# 计算对数 lnX
print(np.log(1))# 计算正弦值,余弦值
print(np.sin(-1))
print(np.cos(-1))# 计算绝对值
print(np.abs(-2))# 计算a的b次幂
print(np.power([1,2,3],2))
print(np.power([1,2,3],3))# 四舍五入
# 4.5 -> 4
# 4.56 -> 5
print(np.round([3.2,4.5,8.1,9.6]))# 向上/下取整
arr = np.array([1.6,25.1,81.7])
print(np.ceil(arr))
print(np.floor(arr))# 检测缺失值Nan
np.isnan([1,2,3,np.nan,3])op:
3.0
[1. 2. 3.]2.7182818284590450.0-0.8414709848078965
0.54030230586813982[1 4 9]
[ 1  8 27][ 3.  4.  8. 10.][ 2. 26. 82.]
[ 1. 25. 81.]array([False, False, False,  True, False])

统计函数

# 求和
print(np.sum(arr))
print(np.sum([1,2,3]))# 计算平均值
print(np.mean(arr))
print(np.mean([1,2,3]))# 计算中位数
# 奇数:排序后中间的数值
# 偶数:排序后中间两个数的平均值
print(np.median([4,1,2]))
print(np.median([1,2,4,8]))# 计算标准差,方差
# 计算平均值
# 计算 方差 = (xi - avg)^2 + ... / n
# 标准差 = 方差开根
print(np.var([1,2,3]))
print(np.std([1,2,3]))# 计算最大值/最小值
print(np.max(arr))
print(np.min(arr))# 计算索引值
print(np.argmax(arr))
print(np.argmin(arr))# 计算分位数
np.percentile(arr,100)# # 前缀和/积数组,
arr = np.array([1,2,3])
print(np.sum(arr))
print(np.cumsum(arr))
print(np.cumprod(arr))op:
98
612.25
2.02.0
3.00.6666666666666666
0.81649658092772619
56
1np.float64(19.0)6
[1 3 6]
[1 2 6]

比较函数

# 是否大于
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],[3,4,5,6,7]))# 逻辑与或非
print(np.logical_and([0,0],[1,5]))
print(np.logical_or([0,0],[1,5]))
print(np.logical_not([1,5]))# 检查元素是否至少有一个元素为True
print(np.any([0,0,0,0]))
# 检查元素是否全部都是True
print(np.all([0,1,0,0]))# 自定义条件 支持嵌套
arr = np.array([1,2,3,4,5])
print(np.where(arr > 3,arr,0))# np.select(条件,返回的结果)
print(np.select([arr > 3,arr < 3],[0,1]))op:
[False False  True  True  True]
[ True False False False False]
[ True  True  True  True  True][False False]
[ True  True]
[False False]False
False[0 0 0 4 5][1 1 0 0 0]

排序函数

# 排序函数
np.random.seed(0)
arr = np.random.randint(1,100,20)
print(arr)
print(np.sort(arr)) 
print(np.argsort(arr)) # 排序后的元素在原数组中的下标
print(arr)# 去重+排序函数
print(np.unique(arr))# 数组拼接
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
print(arr1 + arr2)
print(np.concatenate((arr1,arr2)))# 数组的分割 必须整除
print(np.split(arr1,3))# 调整数组形状
print(np.reshape(arr,[2,10]))
print(np.reshape(arr,[5,4]))op:
[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][ 2  6  7 10 12 13 17 19 21 26 29 38 51 65 72 73 76 77 80 85][5 7 9]
[1 2 3 4 5 6][array([1]), array([2]), array([3])][[45 48 65 68 68 10 84 22 37 88][71 89 89 13 59 66 40 88 47 89]]
[[45 48 65 68][68 10 84 22][37 88 71 89][89 13 59 66][40 88 47 89]]

pandas

series

series创建

# series创建
import pandas as pd
s = pd.Series([20,1,2,3,4])# 自定义索引
s = pd.Series([10,2,3,4,5], index=['a','b','c','d','e'])
s = pd.Series([10,2,3,4,5], index=['1','2','3','4','5'])# 定义name(描述这一列是什么意思的)
s = pd.Series([10,2,3,4,5], index=['1','2','3','4','5'],name = '月份')# 通过字典方式创建
s = pd.Series({'a':1,'b':2,'c':3,'d':4,'e':5})# 从原来列表基础上获取
s1 = pd.Series(s,index=['a','c'])op:
0    20
1     1
2     2
3     3
4     4
dtype: int64
1    10
2     2
3     3
4     4
5     5
dtype: int64
1    10a    1
b    2
c    3
d    4
e    5
dtype: int64
a    1
c    3
dtype: int64

series属性

image

显式可以用自定义索引去获取元素,隐式则是按照下标来获取

  • 显示中\(loc\)支持切片(两边均闭),\(at\)不支持切片

  • 隐式支持切片(左闭右开)

访问元素

# 访问数据
# print(s[0]) # 可能会跟你自定义索引混淆不推荐使用
print(s['a']) # 用自定义索引
print(s[s < 3]) # 布尔索引
print(s.head()) # 返回数据前五行信息
s['f'] = 6 # 添加元素
print(s.tail()) # 返回数据后5行

常用方法

image

image

DataFrame

创建

# 通过series创建
s1 = pd.Series([1,2,3,4,5])
s2 = pd.Series([6,7,8,9,10])
df = pd.DataFrame({'第一列':s1,'第二列':s2})
print(df)# 通过字典来创建
df = pd.DataFrame({"name":['tom','jack','Eric','Apple','Faker'],'age':[12,23,24,24,25],'score':[32,36,87,68,89]},index=[1,2,3,4,5],columns=['name','score','age']
)
df

\(op\):

image

image

属性

image

访问数据

# 获取单列数据
print(df['score'])
df.score# 获取多列数据
df[['name','score']]# 布尔索引(数据筛选)
print(df[df.score > 60])
print(df[(df.score > 60) & (df.age < 30)])

op:

image
image
image

常用方法

image

image

数据分析步骤

  1. 数据收集
  2. 数据清洗
  3. 数据分析
  4. 数据可视化

数据导入/导出

# 导入csv文件
import pandas as pd
df = pd.read_csv('文件路径')# 导出csv文件
df.to_csv('文件路径')# 导入json文件
# 1. pd读json
df = pd.read_json('')# 2. json工具包
import json
with open('') as f:data = json.load(f)
df = pd.DataFrame(data['data'])
http://www.hskmm.com/?act=detail&tid=34502

相关文章:

  • 使用DAO模式改造学生信息管理系统
  • 【ARM CoreLink 系列 4 -- NIC-400 控制器详细介绍】
  • Linux反弹shell解析
  • 2025-10-18 MX-S 模拟赛 赛后总结【MX】
  • P1854 花店橱窗布置 解题笔记
  • P1896[SCOI2005]互不侵犯 解题笔记
  • habse
  • hbase
  • 微信小程序 在云函数本地调试时,总是提示node modules 未安装,立即安装。解决方法
  • Godot-C#场景之间的切换
  • 读书日记1
  • 【ARM CoreLink 系列 3.1 -- CCI-500 详细介绍 -上半部】
  • 央企程序员AI创业一个月感受 ✨
  • tryhackme-预安全-网络基础知识-局域网介绍-05
  • 10.19
  • 从众多知识汲取一星半点也能受益匪浅【day16(2025.10.18)】(加班但只加到四点半)
  • (个人思考)游戏技能的实现
  • 模拟赛T4 分析
  • ubuntu系统中containerd的cni网络配置
  • 十月阅读笔记
  • #20232408 2025-2026-1 《网络与系统攻防技术》实验二实验报告 - 20232408
  • 题解:P2672 [NOIP 2015 普及组] 推销员
  • 一文读懂Schnorr签名
  • 如何选择合适的SAP实施公司?3步锁定靠谱的SAP服务商
  • CSP-S2024
  • 10/19
  • 论DCT和IDCT的重要性,汇编SIMD版第一,此贴第二,就是这么狂 :-)
  • 这些SAP实施公司哪家强?国内比较好的SAP实施商推荐
  • 25秋周总结5
  • UML图