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

python科学计算:NumPy 数组的高级操作

1 数组的形状变换

NumPy 提供了多种方法来改变数组的形状。这些方法不会改变数组的内容,而是重新组织数据的排列方式。

1.1 reshape() 函数

reshape() 是最常用的形状变换函数,它可以改变数组的形状,前提是变换后的总元素数量与原数组一致。

import numpy as np# 创建一个一维数组
arr = np.arange(12)# 将一维数组变换为 3x4 的二维数组
reshaped_arr = arr.reshape(3, 4)print("原数组:", arr)
print("变换后的数组:\n", reshaped_arr)

注意: 如果变换后的维度不能满足元素总数要求,reshape() 会抛出错误。

1.2 ravel() 函数

ravel() 可以将多维数组展平为一维数组,返回的是原数组的视图,修改展平后的数组也会影响原数组。

# 展平二维数组
flattened_arr = reshaped_arr.ravel()
print("展平后的数组:", flattened_arr)
1.3 transpose() 函数

transpose() 用于对多维数组进行转置操作,交换其维度。对于二维数组,转置会将行和列互换。

# 对二维数组进行转置
transposed_arr = reshaped_arr.transpose()
print("转置后的数组:\n", transposed_arr)
1.4 resize() 函数

resize()reshape() 类似,但不同的是,resize() 会直接修改原数组,并且在调整数组大小时,会自动填充或截取数据。

# 使用 resize 改变数组大小
reshaped_arr.resize(2, 6)
print("使用 resize 改变后的数组:\n", reshaped_arr)

2 数组的合并与分割

NumPy 提供了方便的数组合并与分割操作,可以灵活处理数据的拼接与拆分。

2.1 数组的合并

水平合并(hstack)垂直合并(vstack) 是最常见的数组合并操作,用于将多个数组沿着不同轴合并。

# 创建两个数组
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])# 水平合并
hstack_arr = np.hstack((arr1, arr2))
print("水平合并后的数组:\n", hstack_arr)# 垂直合并
vstack_arr = np.vstack((arr1, arr2))
print("垂直合并后的数组:\n", vstack_arr)
2.2 数组的分割

NumPy 提供了 split() 函数,可以将数组按照指定的规则进行分割。

# 创建一个数组
arr = np.arange(16).reshape(4, 4)# 按行分割为两个数组
split_arr = np.split(arr, 2, axis=0)
print("按行分割的数组:\n", split_arr)# 按列分割为两个数组
split_arr_col = np.split(arr, 2, axis=1)
print("按列分割的数组:\n", split_arr_col)

3 数组的排序与搜索

排序和搜索操作在数据分析中非常常用。NumPy 提供了多种方法来对数组进行排序、筛选和搜索。

3.1 数组排序

sort() 函数可以对数组进行排序,支持对一维数组、二维数组进行排序,并且可以指定沿哪个轴进行排序。

# 创建一个随机数组
arr = np.random.randint(1, 100, size=(4, 4))# 对数组进行排序(默认沿最后一个轴)
sorted_arr = np.sort(arr)print("原数组:\n", arr)
print("排序后的数组:\n", sorted_arr)

可以使用 axis 参数指定沿哪个维度进行排序:

# 沿着行排序
sorted_arr_row = np.sort(arr, axis=1)
print("按行排序后的数组:\n", sorted_arr_row)# 沿着列排序
sorted_arr_col = np.sort(arr, axis=0)
print("按列排序后的数组:\n", sorted_arr_col)
3.2 数组的搜索

argmax()argmin() 函数用于查找数组中最大值或最小值的索引,where() 函数则可以用于根据条件查找满足条件的元素。

# 查找数组中最大值和最小值的位置
max_index = np.argmax(arr)
min_index = np.argmin(arr)print("最大值的位置:", max_index)
print("最小值的位置:", min_index)# 使用 where 查找数组中大于 50 的元素
condition = np.where(arr > 50)
print("数组中大于 50 的元素索引:", condition)
3.3 argsort() 函数

argsort() 返回的是排序后的索引值,而不是排序后的数组本身。这在需要保留原数组顺序的同时对索引进行操作时非常有用。

# 创建一个随机数组
arr = np.array([42, 12, 19, 33])# 使用 argsort 获取排序后的索引
sorted_index = np.argsort(arr)
print("排序后的索引:", sorted_index)# 使用排序后的索引访问原数组
sorted_arr = arr[sorted_index]
print("按索引排序后的数组:", sorted_arr)

4 数组的去重与重复

NumPy 提供了去重和生成重复数据的功能,这在数据预处理和特征工程中非常常见。

1 数组去重

unique() 函数用于对数组进行去重,返回的是去重后的数组。

# 创建一个包含重复元素的数组
arr = np.array([1, 2, 2, 3, 4, 4, 5])# 使用 unique 函数去重
unique_arr = np.unique(arr)
print("去重后的数组:", unique_arr)
2 数组的重复

tile()repeat() 函数可以用于生成重复数据。

# 使用 repeat 函数重复每个元素 2 次
repeat_arr = np.repeat(arr, 2)
print("重复后的数组:", repeat_arr)# 使用 tile 函数将整个数组重复 2 次
tile_arr = np.tile(arr, 2)
print("数组重复后的结果:", tile_arr)

http://www.lryc.cn/news/431790.html

相关文章:

  • 【补-网络安全】日常运维(二)终端端口占用排查
  • 设计模式之适配器模式:软件世界的桥梁建筑师
  • Java 入门指南:Java 并发编程 —— Fork/Join 框架 实现任务的拆分与合并
  • token过期时间分平台(web和app)设置方法
  • [000-01-008].Seata案例应用
  • 超详细!!!electron-vite-vue开发桌面应用之创建新窗口以及主进程和子进程的通信监听(十二)
  • java编辑器——IntelliJ IDEA
  • 经验笔记:SSL证书
  • 设计模式之装饰器模式:让对象功能扩展更优雅的艺术
  • Anchor Alignment Metric来优化目标检测的标签分配和损失函数。
  • C++---由优先级队列认识仿函数
  • Client访问Server访问慢的原因
  • 用RPC Performance Inspector 优化你的区块链
  • linux如何查看内存条是ddr几代
  • LeetCode 3153.所有数对中数位差之和:计数
  • Spring Boot 整合 Sentinel 实现流量控制
  • Elasticsearch倒排索引
  • 速盾:ddos常用防御方法是什么?
  • 二分算法入门(简单题)
  • 在使用React Hooks中,如何避免状态更新时的性能问题?
  • Pytest插件pytest-selenium-让自动化测试更简洁
  • 视觉语言模型(VLMs)知多少?
  • 重新修改 Qt 项目的 Kit 配置
  • 【Spring Boot 3】【Web】自定义响应状态码
  • Locksupport凭证的底层原理
  • Elasticsearch 再次开源
  • 对称密码学
  • 正则表达式优化建议
  • Oracle RAC关于多节点访问同一个数据的过程
  • IPC$漏洞多位密码爆破方法