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

数据分析—numpy库

numpy库

NumPy 库全面指南

NumPy (Numerical Python) 是 Python 科学计算的基础库,提供了高性能的多维数组对象和工具。以下是 NumPy 的核心功能和使用方法。

一、安装与基础

1. 安装 NumPy

pip install numpy

2. 导入 NumPy

import numpy as np # 标准导入方式

二、数组创建

1. 基础数组创建

# 从列表创建 
a = np.array([1, 2, 3]) # 一维数组 
b = np.array([[1, 2], [3, 4]]) # 二维数组 
# 特殊数组zeros = np.zeros((3, 4)) # 全0数组 
ones = np.ones((2, 3)) # 全1数组 
empty = np.empty((2, 2)) # 未初始化数组 
full = np.full((2, 2), 7) # 填充指定值 
eye = np.eye(3) # 单位矩阵

2. 序列数组

# 等差数列 
arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8] 
# 等间距数列 
lin = np.linspace(0, 1, 5) # [0. , 0.25, 0.5 , 0.75, 1. ] 
# 对数间隔 
log = np.logspace(0, 2, 3) # [ 1., 10., 100.]

3. 随机数组

# 均匀分布
rand = np.random.rand(2, 3)       # 0-1随机数# 正态分布
randn = np.random.randn(100)      # 标准正态分布# 随机整数
randint = np.random.randint(0, 10, size=5)

三、数组操作

1. 数组属性

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.ndim)    # 维度: 2
print(arr.shape)   # 形状: (2, 3)
print(arr.size)    # 元素总数: 6
print(arr.dtype)   # 数据类型: int32/int64

2. 索引与切片

arr = np.array([0, 1, 2, 3, 4, 5])# 基本索引
print(arr[2])      # 2
print(arr[-1])     # 5# 切片
print(arr[1:4])    # [1, 2, 3]
print(arr[::2])    # [0, 2, 4]# 多维数组索引
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2d[1, 2])  # 6
print(arr2d[:, 1])  # [2, 5]

3. 形状操作

arr = np.arange(6)# 改变形状
print(arr.reshape(2, 3))
# [[0 1 2]
#  [3 4 5]]# 展平数组
print(arr.flatten())    # [0 1 2 3 4 5]# 转置
arr2d = np.arange(6).reshape(2, 3)
print(arr2d.T)
# [[0 3]
#  [1 4]
#  [2 5]]

四、数组运算

1. 数学运算

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])# 算术运算
print(a + b)    # [5 7 9]
print(a * b)    # [4 10 18]
print(a ** 2)   # [1 4 9]# 三角函数
print(np.sin(a))# 对数运算
print(np.log(a))

2. 统计运算

arr = np.array([[1, 2], [3, 4]])print(np.sum(arr))       # 10
print(np.mean(arr))      # 2.5
print(np.max(arr))       # 4
print(np.min(arr, axis=0))  # 每列最小值 [1, 2]
print(np.std(arr))       # 标准差
print(np.median(arr))    # 中位数

3. 广播机制

a = np.array([1, 2, 3])
b = 2# 标量广播
print(a * b)  # [2, 4, 6]# 形状不同的数组广播
a = np.array([[1], [2], [3]])
b = np.array([4, 5, 6])
print(a + b)
# [[5 6 7]
#  [6 7 8]
#  [7 8 9]]

五、线性代数

1. 矩阵运算

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])# 矩阵乘法
print(np.dot(a, b))
# [[19 22]
#  [43 50]]# 矩阵转置
print(a.T)
# [[1 3]
#  [2 4]]# 行列式
print(np.linalg.det(a))  # -2.0# 逆矩阵
print(np.linalg.inv(a))
# [[-2.   1. ]
#  [ 1.5 -0.5]]

2. 解线性方程组

# 解方程组:
# 3x + y = 9
# x + 2y = 8
A = np.array([[3, 1], [1, 2]])
B = np.array([9, 8])
X = np.linalg.solve(A, B)
print(X)  # [2. 3.]

六、、实用技巧

1. 布尔索引

arr = np.array([1, 2, 3, 4, 5])# 条件筛选
print(arr[arr > 3])          # [4, 5]
print(arr[(arr > 2) & (arr < 5)])  # [3, 4]

2. 花式索引

arr = np.arange(12).reshape(3, 4)# 使用索引数组
print(arr[[0, 2]])  # 第0行和第2行
print(arr[:, [1, 3]])  # 第1列和第3列

3.数组切割

import numpy as np
arr = np.arange(36).reshape(6,6)
print(arr)
'''[[ 0  1  2  3  4  5][ 6  7  8  9 10 11][12 13 14 15 16 17][18 19 20 21 22 23][24 25 26 27 28 29][30 31 32 33 34 35]]'''
arr1 = np.hsplit(arr,2)#水平
print(arr1)
'''[array([[ 0,  1,  2],[ 6,  7,  8],[12, 13, 14],[18, 19, 20],[24, 25, 26],[30, 31, 32]]), array([[ 3,  4,  5],[ 9, 10, 11],[15, 16, 17],[21, 22, 23],[27, 28, 29],[33, 34, 35]])]'''
arr2 = np.vsplit(arr,2)#竖直
print(arr2)
'''[array([[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11],[12, 13, 14, 15, 16, 17]]), array([[18, 19, 20, 21, 22, 23],[24, 25, 26, 27, 28, 29],[30, 31, 32, 33, 34, 35]])]'''
b = np.split(arr,2,axis=0)#0为水平,1为竖直,默认为1
print(b)
'''[array([[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11],[12, 13, 14, 15, 16, 17]]), array([[18, 19, 20, 21, 22, 23],[24, 25, 26, 27, 28, 29],[30, 31, 32, 33, 34, 35]])]'''
e = np.array_split(arr,2,1)

4.数组拼接

import numpy as nparr = np.arange(9).reshape(3,3)arr2 =arr*2
print(arr2)arr3 = np.hstack((arr,arr2))#水平
print(arr3,'\n')arr4 = np.vstack((arr,arr2))#竖直
print(arr4,end='\n')arr6 = np.concatenate((arr,arr2),axis=0)#0为水平,1为竖直,默认为0
print(arr6,end='\n')'''[[ 0  2  4][ 6  8 10][12 14 16]]#原数组[[ 0  1  2  0  2  4][ 3  4  5  6  8 10][ 6  7  8 12 14 16]] #水平[[ 0  1  2][ 3  4  5][ 6  7  8][ 0  2  4][ 6  8 10][12 14 16]]#竖直[[ 0  1  2][ 3  4  5][ 6  7  8][ 0  2  4][ 6  8 10][12 14 16]]#
'''

5.读取文件

import numpy as np# 读取简单文本文件
data = np.loadtxt('data.txt')
print(data)# 指定分隔符(默认是任意空白字符)
data = np.loadtxt('data.csv', delimiter=',')# 跳过标题行
data = np.loadtxt('data.txt', skiprows=1)# 选择特定列
data = np.loadtxt('data.txt', usecols=(0, 2))  # 读取第1和第3列# 指定数据类型
data = np.loadtxt('data.txt', dtype=np.float32)

6、数组排序

import numpy as nparr = np.array([3, 1, 4, 2, 5])
sorted_arr = np.sort(arr)
print(sorted_arr)  # 输出: [1 2 3 4 5]
arr = np.array([3, 1, 4, 2, 5])arr = np.array([3, 1, 4, 2, 5])
indices = np.argsort(arr)
print(indices)  # 输出: [1 3 0 2 4]
print(arr[indices])  # 输出: [1 2 3 4 5]arr = np.array(['apple', 'banana', 'cherry', 'date'])# 创建结构化数组
dtype = [('name', 'S10'), ('age', int), ('score', float)]
values = [('Alice', 25, 88.5), ('Bob', 32, 92.3), ('Charlie', 28, 85.0)]
arr = np.array(values, dtype=dtype)# 按年龄排序
print(np.sort(arr, order='age'))
# [(b'Alice', 25, 88.5) (b'Charlie', 28, 85. ) (b'Bob', 32, 92.3)]# 先按分数降序,再按年龄升序
print(np.sort(arr, order=['score', 'age']))
# [(b'Charlie', 28, 85. ) (b'Alice', 25, 88.5) (b'Bob', 32, 92.3)]# 按字符串长度排序
print(np.sort(arr, key=lambda x: len(x)))
# ['date' 'apple' 'banana' 'cherry']

 

NumPy 是 Python 科学计算生态系统的基石,掌握 NumPy 将为学习 Pandas、SciPy、scikit-learn 等库打下坚实基础。

http://www.xdnf.cn/news/16939.html

相关文章:

  • 【AI云原生】1、Function Calling:大模型幻觉破解与Agent底层架构全指南(附Go+Python实战代码)》
  • Spring Batch的2种STEP定义方式
  • 数组和指针的关系
  • 从0搭建YOLO目标检测系统:实战项目+完整流程+界面开发(附源码)
  • 疯狂星期四文案网第28天运营日记
  • zookeeper持久化和恢复原理
  • 锻造企业级数字基座 - 从生死线到增长引擎的全景蓝图
  • 【设计模式】5.代理模式
  • VUE2 学习笔记16 插槽、Vuex
  • Python特性工厂函数详解:优雅管理属性验证
  • 昇思学习营-开发版-模型开发与适配
  • 【鸿蒙高级】
  • AI Competitor Intelligence Agent Team
  • 36. 有一个高 100%的 div,里面有一个高 100px 的 div,剩下一个自动填满
  • HiveMQ核心架构思维导图2024.9(Community Edition)
  • VBA 64位API声明语句第012讲
  • 实现游戏排行榜
  • Spring Boot 的事务注解 @Transactional 失效的几种情况
  • 从马武寨穿越关山
  • K8S部署ELK(五):集成Kibana实现日志可视化
  • [硬件电路-144]:模拟电路 - 开关电源与线性稳压电源常见的性能指标对比
  • Android设备认证体系深度解析:GMS/CTS/GTS/VTS/STS核心差异与认证逻辑
  • 【连接器专题】连接器做为固定连接介质的三种分类
  • 问题集000
  • Go语言常量
  • CAP 理论笔记
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第四天(DOM编程和AJAX异步交互)
  • Mysql深入学习:InnoDB执行引擎篇
  • K8S几种常见CNI深入比较
  • Vue+SpringBoot+langchain4j实战案例:实现AI消息问答 及 Markdown打字机渲染效果