当前位置: 首页 > 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)

相关文章:

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

1 数组的形状变换 NumPy 提供了多种方法来改变数组的形状。这些方法不会改变数组的内容,而是重新组织数据的排列方式。 1.1 reshape() 函数 reshape() 是最常用的形状变换函数,它可以改变数组的形状,前提是变换后的总元素数量与原数组一致…...

【补-网络安全】日常运维(二)终端端口占用排查

文章目录 一、利用ipconfig、netstat 命令行统计二 、策略封禁IP 引言:检查频繁,第一步我们梳理完资产,第二步应该对资产终端进行一个排查,诊断把脉,了解清楚系统的端口占用及开放情况 一、利用ipconfig、netstat 命令行统计 1.先用ipconfig定位该终端的IP地址 2.明确IP地址后…...

设计模式之适配器模式:软件世界的桥梁建筑师

一、什么是适配器模式 适配器模式(Adapter Pattern)是一种结构型设计模式(Structural Pattern),通过将类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。其核心思想是通过一个…...

Java 入门指南:Java 并发编程 —— Fork/Join 框架 实现任务的拆分与合并

Fork/Join Fork/Join 是Java并发编程中的一个框架,用于解决大型任务的并行执行问题。它于 Java 7中引入,旨在简化对多核处理器上可并行执行任务的开发。 Fork/Join 框架基于分治(divide and conquer)的设计思想。它将大型任务划…...

token过期时间分平台(web和app)设置方法

token分平台设置方法 本文介绍了Spring下的登录和鉴权机制的主要方法以及 token认证的主要流程,并介绍在spring中web端和APP端设置不同token过期时间的实现方法。主要基于SpringBootspringSecurityJWT框架实现。 一、应用场景 同一系统的跨平台操作,基于…...

[000-01-008].Seata案例应用

业务说明:这里我们创建三个服务,一个订单服务,一个库存服务,一个账户服务。当用户下单时,会在订单服务中创建一个订单,然后通过远程调用库存服务来扣减下单商品的库存;再通过远程调用账户服务来…...

超详细!!!electron-vite-vue开发桌面应用之创建新窗口以及主进程和子进程的通信监听(十二)

云风网 云风笔记 云风知识库 一、新建打开窗口 1、在electron/main.ts中加入主进程打开窗口逻辑代码 import { ipcMain } from "electron"; ipcMain.handle("open-win", (_, arg) > {const childWindow new BrowserWindow({webPreferences: {preloa…...

java编辑器——IntelliJ IDEA

java编辑器有两种选择——IntelliJ IDEA和VsCode。其中IntelliJ IDEA现在是企业用的比较多的,是专门为java设计的,而VsCode则是通过插件来实现Java编辑的。 1.IntelliJ IDEA 官网下载链接:https://www.jetbrains.com/idea/ 注意选择社区版…...

经验笔记:SSL证书

SSL证书经验笔记 1. 什么是SSL证书? SSL(Secure Sockets Layer)证书是一种数字证书,用于在客户端(如浏览器)和服务器之间建立加密连接,以确保数据传输的安全性。随着互联网的发展,…...

设计模式之装饰器模式:让对象功能扩展更优雅的艺术

一、什么是装饰器模式 装饰器模式(Decorator Pattern)是一种结构型设计模式(Structural Pattern),它允许用户通过一种灵活的方式来动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比使用…...

Anchor Alignment Metric来优化目标检测的标签分配和损失函数。

文章目录 背景假设情况任务和目标TaskAligned方法的应用1. **计算Anchor Alignment Metric**2. **动态样本分配**3. **调整损失函数** 示例总结 背景 假设我们在进行目标检测任务,并且使用了YOLOv8模型。我们希望通过TaskAligned方法来优化Anchor与目标的匹配程度&…...

C++---由优先级队列认识仿函数

文章目录 一、优先级队列是什么? 二、如何使用优先级队列 1、优先级队列容器用法 2、为什么容器本身无序? 三、什么是仿函数? 1. 什么是仿函数? 2. 仿函数的优势 四、仿函数如何使用? 1、重载operator()函数 2、运用第…...

Client访问Server访问慢的原因

1. 网络层面的问题 网络延迟:客户端与服务器之间的地理距离较远(跨ISP、路径次优),导致高网络延迟(如高 RTT 值)。使用 ping 或 traceroute 工具可以帮助定位网络延迟的来源 - mtr: 结合了ping和traceroute功能&#…...

用RPC Performance Inspector 优化你的区块链

目录 什么是RPC? RPC Performance Inspector 是做什么的? 为什么需要这个工具? 如何使用它? 适合谁用? 如何使用? 什么是RPC? RPC Performance Inspector 是一个专门用于测试和分析RPC性能…...

linux如何查看内存条是ddr几代

在 Linux 系统中,可以通过以下几种方法查看内存条的类型和代数(如 DDR3、DDR4 等): 1. 使用 dmidecode 命令 dmidecode 是一个工具,它可以从系统的 DMI 表(也称为 SMBIOS 表)中提取硬件信息&a…...

LeetCode 3153.所有数对中数位差之和:计数

【LetMeFly】3153.所有数对中数位差之和:计数 力扣题目链接:https://leetcode.cn/problems/sum-of-digit-differences-of-all-pairs/ 车尔尼有一个数组 nums ,它只包含 正 整数,所有正整数的数位长度都 相同 。 两个整数的 数位…...

Spring Boot 整合 Sentinel 实现流量控制

在微服务架构中,流量控制是保障系统稳定性和高可用性的关键技术之一。阿里巴巴开源的 Sentinel 是一款面向分布式系统的流量防护组件,旨在从流量控制、熔断降级、系统负载保护等多个维度保障服务的稳定性。本文将详细介绍如何在 Spring Boot 项目中整合 …...

Elasticsearch倒排索引

什么是倒排索引 倒排索引(Inverted Index)是一种将文档中的每个单词映射到包含该单词的文档列表上的数据结构 倒排索引的构建过程 文档1: “我爱吃苹果” 文档2: “我爱吃香蕉” 文档3: “我喜欢苹果和香蕉” 文档分词:将文档中的文本内容…...

速盾:ddos常用防御方法是什么?

DDoS攻击是一种通过向网络资源发送大量请求或大流量数据来使其过载的攻击手段。为了应对这种攻击,常用的防御方法可以分为三个层次:流量清洗、服务器升级和高防CDN。 流量清洗是一种基础的防御手段,它通过过滤和识别恶意流量来阻止DDoS攻击。…...

二分算法入门(简单题)

习题1 704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], targ…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

LangFlow技术架构分析

🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...