NumPy 数组复制与视图详解

NumPy 数组的复制与视图

NumPy 数组的复制和视图是两种不同的方式来创建新数组,它们之间存在着重要的区别。

复制

复制 会创建一个包含原始数组相同元素的新数组,但这两个数组拥有独立的内存空间。这意味着对复制进行的任何更改都不会影响原始数组,反之亦然。

创建副本可以使用以下方法:

arr.copy():创建一个新的数组,该数组包含与原始数组相同元素的副本。 np.array(arr):将数组转换为新的 NumPy 数组。 arr[:]:使用切片创建整个数组的副本。

示例:


python

复制代码

import numpy as np arr = np.array([1, 2, 3, 4, 5]) # 创建副本 copy = arr.copy() # 修改副本 copy[2] = 100 # 打印原始数组和副本 print(arr) print(copy)

输出:


python

复制代码

[ 1 2 3 4 5] [ 1 2 100 4 5]

视图

视图 是对原始数组数据的引用,不拥有独立的内存空间。这意味着对视图进行的任何更改都会直接反映在原始数组中,反之亦然。

创建视图可以使用以下方法:

arr.view():创建一个新的数组,该数组是原始数组数据的视图。 arr[start:end]:使用切片创建原始数组的视图。 arr.reshape():改变数组的形状,但不改变底层数据。

示例:


python

复制代码

import numpy as np arr = np.array([1, 2, 3, 4, 5]) # 创建视图 view = arr.view() # 修改视图 view[2] = 100 # 打印原始数组和视图 print(arr) print(view)

输出:


python

复制代码

[ 1 2 100 4 5] [ 1 2 100 4 5]

检查数组是否拥有数据

我们可以使用 arr.base 属性来检查数组是否拥有其数据。如果 arr.base 为 None,则数组拥有自己的数据,否则它是一个视图。

示例:


python

复制代码

import numpy as np arr = np.array([1, 2, 3, 4, 5]) copy = arr.copy() view = arr.view() print(copy.base) # None print(view.base) # <ndarray object at 0x00000222588287E0>

练习

使用以下代码创建数组 arr


python

复制代码

import numpy as np arr = np.array([10, 20, 30, 40, 50])

并使用以下方法创建 arr 的副本:

arr.copy() np.array(arr) arr[:]

在每个方法之后,打印原始数组和副本,并验证它们是否相等。

在评论中分享您的代码和结果。

Sure, here is the requested Markdown formatted content:

获取数组的形状

NumPy 数组的形状描述了数组中元素的组织方式,并由包含每个维度中元素数量的元组表示。

获取数组形状

可以使用 arr.shape 属性获取 NumPy 数组的形状。它返回一个元组,其中每个元素表示相应维度的长度。

示例:


python

复制代码

import numpy as np # 创建一个二维数组 arr = np.array([[1, 2, 3], [4, 5, 6]]) # 获取数组形状 print(arr.shape)

输出:


python

复制代码

(2, 3)

这意味着数组包含 2 行和 3 列。

形状元组的含义

形状元组中的每个元素表示相应维度的长度。例如,如果形状为 (2, 3, 4),则数组具有:

2 个行 3 列 每个元素 4 个值

使用ndmin创建具有特定形状的数组

我们可以使用 ndmin 参数来创建具有指定形状的新数组,即使原始数据不具有该形状。ndmin 参数指定要创建的最小维度数。如果原始数据具有比 ndmin 更高的维度,则形状将保留。如果维度数不足,则将添加新维度,并用 1 填充元素。

示例:


python

复制代码

import numpy as np # 使用 ndmin=5 创建一个包含值 1,2,3,4 的向量 arr = np.array([1, 2, 3, 4], ndmin=5) print(arr) print(arr.shape)

输出:


python

复制代码

[[[[1 2 3 4]]]] (1, 1, 1, 1, 4)

练习

创建以下形状的 NumPy 数组,并打印它们的形状:

一个包含 10 个元素的一维数组。 一个包含 5 行 4 列的二维数组。 一个包含 2 x 3 x 2 的三维数组。

在评论中分享您的代码和输出。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

NumPy数组的高级操作:提升数据处理效率 NumPy是Python科学计算的核心库,其核心数据结构ndarray提供了高效的多维数组操作能力。掌握NumPy数组的高级操作技巧,能够显著提升数据处理的性能和代码简洁性。本文将深入探讨广播机制、视图副本、结构化数组等关键概念,帮助读者突破基础操作的局限。 --- 广播机制(Broadcasting) 1.1 广播规则原理 广播机制允许NumPy在不同形状的数组间执行逐元素操作,其核心规则: 规则详解: 维度对齐:从右向左匹配,不足的维度补1 尺寸扩展:维度大小为1的轴会被复制扩展 1.2 实际应用场景 数据归一化:data / data.max(axis=0) 外积计算: --- 视图(View)副本(Copy) 2.1 视图的工作原理 视图共享原始数组内存,常见创建方式: 2.2 副本的显式创建 2.3 典型误区和解决方案 问题场景: --- 结构化数组记录数组 3.1 定义结构化数据类型 3.2 高级索引技巧 3.3 实际应用示例 --- 通用函数(ufunc)自定义操作 4.1 ufunc的核心特性 4.2 创建自定义ufunc 4.3 常用数学ufunc --- 高级索引技巧 5.1 布尔索引 5.2 花式索引(Fancy Indexing) 5.3 性能优化建议 --- 内存布局性能优化 6.1 理解数组存储顺序 6.2 原地操作优化 6.3 大数组处理策略 --- 总结 广播机制:实现不同形状数组的智能计算 内存视图:平衡性能内存效率的关键 结构化数组:处理混合类型数据的利器 性能进阶:通过ufunc和内存布局优化计算效率 延伸方向: 使用np.einsum进行张量运算 结合Numba加速数值计算 探
内容概要:本文提出了一种基于主从博弈理论的售电商多元零售套餐设计多级市场购电策略,旨在优化售电商在复杂电力市场环境下的运营决策。通过构建主从博弈模型,将售电商作为领导者制定差异化零售套餐,用户作为追随者根据自身效用做出用电购电选择,从而实现供需双方的动态互动均衡。研究结合Matlab进行仿真代码实现,完整复现了从模型构建、变量设定、均衡求解到结果分析的全过程,验证了该策略在提升售电商市场收益、降低用户用电成本、促进多级电力市场(如批发市场零售市场)协调运行方面的有效性,具备较高的理论深度工程应用价值; 适合人群:具备一定电力系统基础、博弈论知识及优化建模能力,从事电力市场、能源经济、综合能源系统等方向的科研人员、高校研究生及行业从业者; 使用场景及目标:①用于研究售电商在竞争性电力市场中的动态定价机制多元化套餐设计方法;②支撑售电商在多级市场环境下的购电组合优化风险规避决策;③为需求响应建模、用户行为分析及主从博弈在能源系统中的应用提供可复现的仿真框架代码参考; 阅读建议:本文理论推导编程实践紧密结合,建议读者结合Matlab代码逐模块学习模型实现过程,重点关注目标函数构建、约束条件处理、均衡点求解算法(如KKT条件应用)等关键环节,并可在现有模型基础上引入不确定性因素(如可再生能源出力波动、负荷预测误差)以拓展模型的鲁棒性实用性。
内容概要:本文详细介绍了基于Matlab实现的5节点电力系统潮流计算,重点采用牛顿-拉夫逊法(牛拉法)和PQ分解法两种经典数值算法进行求解。通过构建节点导纳矩阵、建立功率平衡方程并对其进行线性化处理,系统阐述了两种方法在迭代求解过程中的实现机制。资源涵盖完整的算法流程、高可读性代码实现、详尽的注释说明以及收敛特性分析,直观展示了牛拉法在收敛速度精度上的优势,以及PQ分解法在简化计算方面的实用性,帮助读者深入掌握电力系统稳态分析的核心原理工程应用技巧。; 适合人群:具备电力系统分析基础理论知识,熟悉Matlab编程环境,从事电气工程、电力系统规划、运行控制等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解牛顿-拉夫逊法PQ分解法的数学原理迭代结构差异;②通过编程实践提升对潮流计算中雅可比矩阵构造、修正方程求解收敛判据设置的能力;③为复杂电网的稳态仿真、优化调度、状态估计及后续动态分析提供扎实的算法基础技术储备; 阅读建议:建议结合经典电力系统分析教材同步学习,先掌握算法的理论推导,再逐行调试Matlab代码,重点关注不同初值设定、参数变化对收敛性能的影响,鼓励自行修改网络拓扑或负荷参数以观察算法表现,从而深化对潮流计算鲁棒性适用性的理解。
内容概要:本文系统阐述了利用相量测量单元(PMU)进行电力系统状态估计的技术原理实现方法,重点针对IEEE-14和IEEE-30节点标准测试系统,提供了完整的Matlab代码实现方案。通过高精度同步相量测量数据,构建状态估计的数学模型,采用加权最小二乘法等算法实现对电力系统电压幅值、相角等关键状态变量的精确估计,显著提升了系统的可观测性动态监控能力。文中深入解析了PMU配置优化策略、量测冗余增强方法及状态估计的数值求解流程,帮助读者掌握从理论建模到仿真实现的全过程。; 适合人群:具备电力系统分析基础和Matlab编程能力的高校研究生、科研人员及电力行业工程技术人才,特别适用于从事智能电网、广域测量系统(WAMS)、状态估计运行监控等方向的研究开发人员。; 使用场景及目标:①掌握基于PMU的电力系统状态估计核心原理算法实现;②学习在Matlab中构建IEEE标准节点系统模型并完成状态估计算法的仿真验证;③为电力系统实时监控、运行状态可视化、故障诊断安全评估等高级应用提供技术支撑。; 阅读建议:建议读者结合所提供的Matlab代码逐模块调试运行,深入理解量测建模、雅可比矩阵构建、迭代求解等关键步骤。可进一步扩展至不同PMU布点方案、引入噪声干扰或坏数据检测机制,以提升算法鲁棒性,增强面向实际工程应用的仿真能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值