NumPy入门完全解读(补充)

本文提要:本文将结束NumPy入门阶段需要掌握的所有知识点。


一、常用操作(下)

np.stack(array,axis=0)

  • arrays: Sequence[ArrayLike]
  • 沿新轴连接一系列数组,序列中的数组拥有相同的shape
lis = [[1, 2, 3], [5, 6, 7]]
arrays = [np.array(lis) for _ in range(5)]
print(arrays)
print(np.stack(arrays, axis=0).shape) # 最常用
print(np.stack(arrays, axis=2).shape)
print(np.stack(arrays, axis=1))

np.hstack(tup) / np.vstack(tup)

  • tup: Sequence[ArrayLike]
  • 第一个是通过水平堆叠来生成数组
  • 第二个是通过垂直堆叠来生成数组
a = np.array((1, 2, 3)) # 一维的
b = np.array((4, 5, 6))
print(np.hstack((a,b)))
print(np.vstack((a,b)))
c = np.array([[1], [2], [3]])
d = np.array([[4], [5], [6]])
print(np.hstack((c,d)))
print(np.vstack((c,d)))

np.repeat(a,repeats,axis=None)

  • repeats: 重复次数
  • axis:指定重复值的轴。没指定时,默认扁平化处理
  • 重复数组中的元素
x = np.array([[1, 2], [3, 4]])
print(np.repeat(x, 2)) # 扁平化后依次重复[1 1 2 2 3 3 4 4]
print(np.repeat(x, 2, axis=0)) # 直接对行进行重复
print(np.repeat(x, [2,3], axis=1)) # 对列上的元素进行重复,第一列重复两次,第二列重复三次

np.unique(arr,return_index=False,return_inverse=False,return_counts=False,axis=None)

  • arr:输入的数组或array_like
  • return_index:为True时,还会返回新数组元素在旧数组中的下标
  • return_inverse:为True时,还会返回旧数组元素在新数组中的下标
  • return_counts:为True时,还会返回去重数组中的元素在原数组中的出现次数
  • axis:指定操作的轴。没指定时,默认扁平化处理
  • 返回数组中排序的唯一元素,重复元素会被去除,只保留一个
print(np.unique([3, 3, 1, 1, 2, 2, 2],return_index=True))
print(np.unique([3, 3, 1, 1, 2, 2, 2],return_inverse=True))
print(np.unique([3, 3, 1, 1, 2, 2, 2],return_counts=True))
a = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
print(np.unique(a, axis=0)) # 行排序,有重复去重行,确有重复
print(np.unique(a, axis=1)) # 列排序,有重复去重列,没有重复列

np.dot(a,b)

  • 两个数组的点积
a = [1, 2, 3]
b = [1, 0, 2]
print(np.dot(a, b)) # 对位相乘再相加,一般用在一维数组运算上
c = np.identity(2, dtype=np.int32)
d = [[4, 1], [2, 2]]
print(np.dot(c, d))

np.matmul(x1,x2)
其用法可以用@操作符来代替

  • 两个数组的矩阵乘积
print(np.matmul(c, d))
print(c @ d) # 必须要有一个是ndarray

np.greater(x1,x2) / np.greater_equal(x1,x2) / np.less(x1,x2) / np.less_equal(x1,x2) / np.equal(x1,x2) / np.not_equal(x1,x2)

  • x1,x2的形状必须相同,或者可以广播
  • 第一个按元素判断x1>x2的结果
  • 第二个按元素判断x1>=x2的结果
  • 第三个按元素判断x1<x2的结果
  • 第四个按元素判断x1<=x2的结果
  • 第五个按元素判断x1==x2的结果
  • 第六个按元素判断x1!=x2的结果
print(np.greater([4, 2], [2, 2]))
print(np.array([4, 2]) > np.array([2, 2]))

np.sin(x) / np.cos(x) / np.tan(x) / np.arcsin(x) / np.arccos(x) / np.arctan(x)

  • x: 角度(就是幅度值)
  • 正弦函数 / 余弦函数 / 正切函数 / 反正弦函数 / 反余弦函数 / 反正切函数
# Numpy中具有很多的数学函数工具,对数组中的元素进行批量处理
arr1 = np.array([np.pi/12, np.pi/6, np.pi/4, np.pi/3, np.pi/2, np.pi])
c1 = np.sin(arr1)
print(c1)
arr2 = [-1, -0.5, 0, 0.5, 1]
c2 = np.arccos(arr2)
print(c2)

np.floor(x) / np.ceil(x)

  • 返回x的底限 / 上限(可进行批处理)
a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])
print(np.floor(a))
print(np.ceil(a))

ndarray.max(axis=None,keepdims=False) / ndarray.min(axis=None,keepdims=False)

  • 返回沿给定轴的最大/小值,axis没有指定时,默认为None,表示返回所有元素的最大/小值
lis = [[0, 1, 7, 3], [4, 9, 6, 2], [8, 5, 11, 10]]
arr1 = np.array(lis)
print(arr1)
print(arr1.max())
print(arr1.max(axis=0)) # 有三行,就是三兄弟,现在来比较三兄弟各自的家当
print(arr1.max(axis=1, keepdims=True)) # 比较内层括号中的数,并保持维度不变

ndarray.mean(axis=None,keepdims=False) / ndarray.var(axis=None,keepdims=False) / ndarray.std(axis=None,keepdims=False)

  • 返回沿给定轴的平均值/方差/标准差,axis没有指定时,默认为None,表示返回所有元素的平均值/方差/标准差
print(arr1.mean(axis=0)) 
print(arr1.var(axis=0)) 
print(arr1.std(axis=0)) 

np.prod(a,axis=None,keepdims=np._NoValue,initial=np._NoValue) / np.sum(a,axis=None,keepdims=np._NoValue,initial=np._NoValue)

  • 返回给定轴上数组元素的乘积/和
print(arr1.prod(axis=0)) 
print(arr1.prod(axis=0, initial=10)) # 把初始值乘进去
print(arr1.sum(axis=0)) 
print(arr1.sum(axis=0, initial=10))  # 把初始值加进去

np.exp(x) / np.log(x) / np.log2(x) / np.log10(x)

  • 计算e的x幂次方 / 计算x的自然对数 / 计算x的以2为底的对数 / 计算x的以10为底的对数
print(np.exp([1, 2, 3]))
print(np.log([1, np.e, np.e**2]))
print(np.log2([1, 2, 2**4]))
print(np.log10([1, 10, 1e-15]))

np.sort(a,axis=-1)

  • 返回排序之后的新数组
a = np.array([[4, 1], [3, 2]])
print(np.sort(a))
print(np.sort(a,axis=0))
print(np.sort(a,axis=None)) # 扁平化处理

np.nonzero(a)

  • 返回非零元素的索引
x = np.array([[3, 0, 0], [0, 4, 0], [5, 6, 0]])
print(np.nonzero(x))
print(x[np.nonzero(x)]) # 组合索引
# 可以使用np.nonzero()获得数组中大于3的索引
y = np.array([[3, 7, 2], [0, 4, 1], [5, 6, 0]])
print(y[y>3]) # 获得值
print(np.nonzero(y>3)) # 获得索引

np.where(condition,x=None,y=None)

  • condition: array_like, bool
  • x,y: array_like,要么都传参,要么都不传
  • 如果传三个参数,条件成立返回x,不成立时返回y
  • 如果只传第一个参数,返回符合条件的元素的索引
print(y)
print(y>3)
print(np.where(y>3))
print(np.where(y>3, True, False))

np.argwhere(a)

  • 找出数组中按元素分组的非零元素的索引
x = np.arange(6).reshape(2, 3)
coords = np.argwhere(x>1)
print(coords)
print(coords[:, 0]) # 组合索引,有降维
print(coords[:, 0:1]) # 多维切片,没降维
print(x[coords[:, 0], coords[:,1]])
print(x[np.where(x>1)])
print(x[coords[:, 0:1], coords[:,1:2]])

np.maximum(x1,x2) / np.minimum(x1,x2)

  • 返回x1和x2逐个元素比较中的最大值/最小值
a = [[2, 3, 4], [1, 5, 2]]
b = [[1, 2, 7], [3, 2, 9]]
print(np.maximum(a, b))
print(np.minimum(a, b))

np.argmax(a,axis=None) / np.argmin(a,axis=None)

  • 返回沿轴的最大值/最小值的索引
a = np.array([[2, 3, 4], [1, 2, 5]])
print(a.argmax()) # 默认压扁之后的索引位
print(np.argmax(a, axis=0))

np.random.normal(loc=0.0,scale=1.0,size=None)

  • loc: 均值(中心)
  • scale:标准差
  • size:输出的形状
  • 返回从正态分布中抽取的随机样本
print(np.random.normal(3, 2.5, size=(2, 4)))

np.random.randn(d0,d1,...,dn)

  • 返回从标准正态分布中抽取给定形状的随机样本
print(np.random.randn()) # 没有参数返回一个值
print(np.random.randn(2, 3))

np.random.rand(d0,d1,...,dn)

  • 返回从均匀分布[0,1)中抽取的给定形状的随进样本
print(np.random.rand()) # 没有参数返回一个值
print(np.random.rand(2, 3))

np.random.randint([low,]high,size=None)

  • 返回从离散均匀分布[low,high)中抽取的随机整数
print(np.random.randint(20, size=10))   # 离散的
print(np.random.randint(0, 100, size=(3,2))) 

np.random.uniform(low=0.0,high=1.0,size=None)

  • 返回从均匀分布[low,high)中抽取的随机样本
print(np.random.uniform(20, size=10))  # 连续的
print(np.random.uniform(0, 100, size=(3,2))) 

np.random.seed(x)

  • 随机数种子
np.random.seed(3)
print(np.random.uniform(1, 2, size=4))

np.random.seed(5)
print(np.random.uniform(1, 2, size=4))

np.random.seed(3) # 下面的随机数被这里的随机数种子固定了
print(np.random.uniform(1, 2, size=4))

# np.random.seed() # 又变得随机了
print(np.random.uniform(1, 2, size=4))
内容概要:本文针对不对称电网故障下T型三电平逆变器的低电压穿越(LVRT)问题,提出了一种多目标协同控制策略,并通过Simulink进行仿真实现。该策略综合考虑了有功功率、无功功率、负序电流、中点电位平衡及谐波抑制等多个控制目标,采用正负序分离、双闭环调节与多目标优化算法协同作用,实现了故障期间并网电流的精确控制与系统稳定运行。研究重点在于提升逆变器在电网电压跌落与不平衡等恶劣工况下的适应能力,确保其符合并网技术规范。仿真结果表明,该策略在动态响应速度、电能质量改善和系统鲁棒性方面均表现出优越性能; 适合人群:具备电力电子、新能源并网或自动控制等相关专业背景,从事逆变器控制、微电网或柔性输电系统研究的研发人员及研究生;熟悉Simulink仿真工具者更佳; 使用场景及目标:①研究不对称电网故障下三电平逆变器的低电压穿越控制方法;②掌握多目标协同控制策略的设计思路与实现手段;③通过Simulink仿真平台复现并验证先进控制算法,服务于科研论文撰写、项目开发或工程优化; 阅读建议:建议结合Simulink仿真模型同步学习,重点关注正负序分离锁相、多目标权重分配与中点电位控制模块的实现细节,深入理解控制策略在暂态过程中的协同机制,并尝试调整故障条件与参数以评估系统鲁棒性。
内容概要:本文围绕构网型变流器在不对称电网条件下的正负序阻抗解耦特性展开研究,基于Simulink搭建详细的仿真模型,系统分析其在弱电网环境中的动态响应与稳定性表现。研究通过建立变流器的小信号数学模型,采用频率扫描法(扫频法)对正负序阻抗进行精确辨识,并利用Nyquist图与Bode图开展频域稳定性分析,深入揭示构网型变流器在不同电网强度下的失稳机理与交互特性。重点探讨了解耦控制策略的设计原理及其对改善系统稳定性的关键作用,旨在为高比例新能源接入背景下电力系统的稳定运行与控制器优化提供理论支撑与技术路径。; 适合人群:具备电力电子、自动控制及电力系统分析等相关专业知识,从事新能源并网、微电网控制、变流器建模与稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握构网型变流器正负序阻抗的建模与仿真方法;②理解基于小信号分析的扫频辨识技术与频域稳定性判据的应用流程;③应用于新型电力系统中构网型设备的并网稳定性评估与控制器参数优化设计;④为相关课题的仿真复现、论文撰写与项目研究提供完整的技术参考与实现方案。; 阅读建议:建议读者结合文中所述Simulink仿真模型,亲自动手实现阻抗扫频与稳定性分析全过程,重点关注锁相环、电流控制环等关键模块的小信号建模方法,并对照Nyquist与Bode图进行多工况对比分析,以深化对系统频域特性的理解与工程应用能力。
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 在Linux操作系统平台上进行C++语言开发,达成串行通信功能是一项核心且关键的技能,特别是在嵌入式系统设计、设备管理或物联网解决方案中。此"Linux下C++实现简易串口交互"范例展示了一个基础性的架构,旨在协助程序员了解怎样运用C++与计算机的串行端口(COM端口)进行互动,完成数据的发送及接收任务。接下来将详尽阐述相关技术要点。 1. **串行通信原理**: 串行通信是一种历史悠久的通信机制,借助串行接口来传输信息。在Linux环境中,串行端口通常被映射为/dev/ttySx的路径,其中x代表端口的编号,例如/dev/ttyS0或/dev/ttyUSB0等。串行通信所涉及的重要参数包含波特率、数据位数、停止位数及校验类型等。 2. **C++与系统接口调用**: 若要在C++中操作串口,必须借助系统级调用或第三方库。本范例可能直接运用了包含在<termios.h>头文件中的函数,比如使用tcgetattr()和tcsetattr()来配置串口特性,open()和close()用于串口的开启与关闭,以及write()和read()负责数据的发送与接收。 3. **<termios.h>中的结构体**: struct termios结构体是控制串口行为的决定性组件,它包含了串口的多种配置选项,如波特率(Baud Rate)、数据位(Data Bits)、停止位(Stop Bits)和校验位(Parity Bit)等。程序员需要通过cfsetispeed()和cfsetospeed()来设定输入和输出的波特率,而c_cflag字段则用于设定其他串口配置。 4. **串口初始化...
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 DELL故障诊断灯是戴尔计算机系统内一种极具价值的硬件故障检测设备。它被集成在计算机的主板上,通过呈现不同的颜色以及闪烁模式来指示灯,协助用户和维修人员迅速识别潜在的硬件故障,进而缩短了诊断时间并优化了维修效率。接下来将具体阐述DELL故障诊断灯的运作机制、常规灯码的象征意义以及如何运用这些信息来处理故障。 一、运作机制 DELL故障诊断灯系统一般包含电源指示灯和位于计算机背部或侧面的诊断指示灯。电源指示灯用于展示系统的供电状态,而诊断指示灯则负责对各个核心硬件单元(例如内存、中央处理器、硬盘驱动器、显卡等)进行故障排查。当系统遭遇异常时,这些灯会以特定的亮灯或闪烁方式来构成一个灯码序列,用以揭示问题的类型和潜在的原因。 二、灯码象征意义 1. 电源指示灯: - 绿色持续点亮:意味着电源已成功接入且系统在正常运作。 - 黄色频闪:或许暗示电源适配器或电池存在故障。 - 不亮或呈现红色:可能存在电源方面的难题,例如电源适配器未正确连接或已损坏。 2. 诊断指示灯: - 灯码1-4:通常象征内存单元、中央处理器单元、主板以及显卡等主要部件的工作状态。例如,若第一个灯亮起,可能指向内存单元存在故障;第二个灯亮,可能是中央处理器单元发生故障。 - 持续闪烁:这种闪烁模式通常指向严重的硬件故障,如自检(POST)过程未能成功完成。 - 快速闪烁:可能意味着BIOS或CMOS设置存在错误。 - 慢速闪烁:可能表明存在次级的硬件问题,如外围设备的连接出现异常。 三、故障排查流程 1. 观察灯码:首先检查电源指示灯,确认系统是否已经正确供电。随后,审视诊断指示灯的闪烁样式,记录下灯码。 2....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值