人工智能研究生前置知识—科学计算库numpy
人工智能研究生前置知识—科学计算库numpy
numpy是python中做科学计算的基础库,对数组进行操作
整个numpy的操作和使用比较简单因此可以通过案例的学习掌握基本的用法在之后的学习中不断的进行熟悉和补充
创建数组(矩阵 )
创建的ndarray数组与python中的列表有格式上的相似之处。所有创建的数据类型都是ndarray类型
import numpy as npt1 = np.array([1,2,3])
print(t1)
print(type(t1))
运行结果
[1 2 3]
<class ‘numpy.ndarray’>
创建顺序数组的方式二
#创建方式二:生成顺序数组
t2 = np.array(range(6))
#等价形式
t3 = np.arange(6)print(t2)
print(t3)
运行结果
[0 1 2 3 4 5]
[0 1 2 3 4 5]
创建方式三:设置起始位置与步长的创建方式
t4 = np.arange(4,10,2)
print(t4)
[4 6 8]
补充:查看当前数组中存放的数据类型可以使用.dtype的类型来进行获取和实现。对于数据类型可以参考numpy中常见的数据类型。
print(t4.dtype)
t5 = np.array(['aaa',12,5.2])
print(t5)
print(t5.dtype)
运行结果:
int32
[‘aaa’ ‘12’ ‘5.2’]
<U32
创建方式四:上面了解了numpy中存储数据常见的数据类型,由此可以引出第四种创建方式。在创建时引入指定的数据类型
t6 = np.arange(4,dtype=float)
print(t6)
print(t6.dtype)[0. 1. 2. 3.]
float64
补充调整数据类型的操作
#调整数据类型的操作
t7 = t6.astype("int8")
print(t7)
[0 1 2 3]
创建方式五:通过列表生成式随机生成十个小数
#列表生成式
t8 = np.array([random.random() for i in range(10)])
print(t8)
print(t8.dtype)[0.29322004 0.66179523 0.49565288 0.91203122 0.36098369 0.390472660.67372706 0.28380916 0.08134317 0.96597784]
float64
补充:numpy中的去指定位数的小数的操作步骤(固定小数的位数)
t9 = np.round(t8,2)
print(t9)
[0.95 0.03 0.31 0.06 0.18 0.19 0.47 0.71 0.28 0.11]
数组的形状
查看数组的形状可以使用shape来调用,而修改数组的形状可以通过reshape来进行调用
创建一个二维数组每个数组中含有6个元素的数据
import numpy as npa = np.array([[3,4,5,6,7,8],[4,5,6,7,8,9]])
print(a)
print(a.shape)# 修改数组的形状并进行输出
print(a.reshape(3,4))
print(a.shape)
print(a)
[[3 4 5 6 7 8]
[4 5 6 7 8 9]]
(2, 6)
[[3 4 5 6]
[7 8 4 5]
[6 7 8 9]]
(2, 6)
[[3 4 5 6 7 8]
[4 5 6 7 8 9]]
问题思考:为什么a还是2行6列的数组格式呢?:原因reshape函数的操作是原地操作只对数组本身进行修改而没有返回值存在
对于shape的输出是一个元祖,二维数据中含有两个数值,三维数组中含有三个数值来进行表示以此类推。(通常将高维数组降为低维数组进行计算)
t5 = np.arange(24).reshape(2,3,4)
print(t5)[[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]][[12 13 14 15][16 17 18 19][20 21 22 23]]]
# 降维操作
t6 = t5.reshape(4,6)
print(t6)t7 = t5.reshape(24,)
print(t7)[[ 0 1 2 3 4 5][ 6 7 8 9 10 11][12 13 14 15 16 17][18 19 20 21 22 23]]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
将高维数组降为低维数组可以使用numpy中内置的方法flatten将其展平为一维数组
# 一维数组展平
t8 = t7.flatten()
print(t8)
数组的计算
数组和数值进行计算
计算规则:数组中的每一个元素都加上该数值来进行计算(应用到数组中的每一个数字)也称为广播机制,同时可以应用减法,乘法,除法等相关运算
print(t6)
print(t6+2)[[ 0 1 2 3 4 5][ 6 7 8 9 10 11][12 13 14 15 16 17][18 19 20 21 22 23]]
[[ 2 3 4 5 6 7][ 8 9 10 11 12 13][14 15 16 17 18 19][20 21 22 23 24 25]]
补充特殊的运算方式除0进行运算
[[nan inf inf inf inf inf]
[inf inf inf inf inf inf]
[inf inf inf inf inf inf]
[inf inf inf inf inf inf]] inf:无穷 nan:不是数值
同维数数组进行计算
计算规则:满足矩阵之间的运算规则:相同对应位置的元素之间进行相加的运算操作(同理加法乘法除法相同)。
b1 = np.arange(100,124).reshape(4,6)
print(t6)
print(b1)
print(b1+t6)[[ 0 1 2 3 4 5][ 6 7 8 9 10 11][12 13 14 15 16 17][18 19 20 21 22 23]]
[[100 101 102 103 104 105][106 107 108 109 110 111][112 113 114 115 116 117][118 119 120 121 122 123]]
[[100 102 104 106 108 110][112 114 116 118 120 122][124 126 128 130 132 134][136 138 140 142 144 146]]
不同维数的数组之间进行计算
使用二维数组与一维数组进行计算:采用的计算规则是高维数组中的每个低维元素与低维数组进行运算举例说明
print(t6)
b2 = np.arange(0,6)
print(b2)
print(t6-b2)
# 类似于取反的操作
print(b2-t6)[[ 0 1 2 3 4 5][ 6 7 8 9 10 11][12 13 14 15 16 17][18 19 20 21 22 23]]
[0 1 2 3 4 5]
[[ 0 0 0 0 0 0][ 6 6 6 6 6 6][12 12 12 12 12 12][18 18 18 18 18 18]]
[[ 0 0 0 0 0 0][ -6 -6 -6 -6 -6 -6][-12 -12 -12 -12 -12 -12][-18 -18 -18 -18 -18 -18]]
在判断满足计算条件时至少需要有一个维度满足相同的条件,否则会报错,在之后的练习使用中可以尝试3维数组与2维数组的计算等
numpy读取本地数据
轴的概念
在numpy中轴可以理解为方向,使用数字0,1,2来进行表示,对于一维数组只有一个0轴,对于2维数组(shape(2,2))有0轴和1轴,同理对于三维数组(shape(2,2,3))有0轴1轴2轴
有了轴的概念之后,计算一个二维数组的平均值必须指定在那一个方向
读取csv数据简单了解
numpy索引
- 去numpy中的指定位置的元素(1维,2维)
一维数组的索引和切片操作
#numpy的索引与切片操作
import numpy as np
a = np.arange(3,15)
print(a)
print(a[4])
print(a[:])[ 3 4 5 6 7 8 9 10 11 12 13 14]
7
[ 3 4 5 6 7 8 9 10 11 12 13 14]
二维数组的索引和切片操作
b= np.arange(1,13).reshape(3,4)
print(b)
# 情况一选中一行元素
print(b[1])
# 等价形式
print(b[1,:])
#情况二选中一个元素
print(b[1][2])
# 等价形式
print(b[1,2])
# 选中一列元素
print(b[:,1])[[ 1 2 3 4][ 5 6 7 8][ 9 10 11 12]]
[5 6 7 8]
[5 6 7 8]
7
7
[ 2 6 10]
[5 6 7 8]
数组的转置与迭代
# 矩阵或数组的转置
print(b.T)
# 遍历与迭代(按列进行迭代)
for col in b.T:print(col)
#按行进行迭代
for rol in b:print(rol)
结果:
[[ 1 5 9][ 2 6 10][ 3 7 11][ 4 8 12]]
[1 5 9]
[ 2 6 10]
[ 3 7 11]
[ 4 8 12]
[1 2 3 4]
[5 6 7 8]
[ 9 10 11 12]
numpy的数组合并
- 一维数组的垂直合并(vertical stack)
# array数组的合并
import numpy as np
a = np.array([1,1,1])
b= np.array([2,2,2])
print(np.vstack((a,b)))
# 测试合并之后变为二维数组
print(np.vstack((a,b)).shape)[[1 1 1][2 2 2]]
(2, 3)
要确保满足格式的条件下进行合并操作
- 一维数组的水平合并(左右合并 horizontal stack)
print(np.hstack((a,b)))
print(np.hstack((a,b)).shape)[1 1 1 2 2 2]
(6,)
- 向量的转置操作
# 向量进行转置可以在转置之后进行合并
print('===========')
c = a[:,np.newaxis]
print(c)
print(c.shape)
d = a[np.newaxis,:]
print(d)
print(d.shape)===========
[[1][1][1]]
(3, 1)
[[1 1 1]]
(1, 3)
(3,)
numpy数组的分割
若进行横向分割axis = 0 进行纵向分割是axis = 1
等量分割
import numpy as np
a = np.arange(12).reshape((3,4))
print(a)
print(np.split(a,3,axis=0))
print(np.split(a,4,axis=1))[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[array([[0],[4],[8]]), array([[1],[5],[9]]), array([[ 2],[ 6],[10]]), array([[ 3],[ 7],[11]])]
不等量分割
print(np.array_split(a,3,axis=1))
print(np.array_split(a,6,axis=0))
不等量分割的结果
[array([[0, 1],
[4, 5],
[8, 9]]), array([[ 2],
[ 6],
[10]]), array([[ 3],
[ 7],
[11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]]), array([], shape=(0, 4), dtype=int32), array([], shape=(0, 4), dtype=int32), array([], shape=(0, 4), dtype=int32)]
对应的简单等价形式
# 等价分割的形式
print('==============')
print(np.vsplit(a,3))
print(np.hsplit(a,4))
print(np.hsplit(a,2))==============
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[array([[0],[4],[8]]), array([[1],[5],[9]]), array([[ 2],[ 6],[10]]), array([[ 3],[ 7],[11]])]
[array([[0, 1],[4, 5],[8, 9]]), array([[ 2, 3],[ 6, 7],[10, 11]])]
相关文章:
人工智能研究生前置知识—科学计算库numpy
人工智能研究生前置知识—科学计算库numpy numpy是python中做科学计算的基础库,对数组进行操作 整个numpy的操作和使用比较简单因此可以通过案例的学习掌握基本的用法在之后的学习中不断的进行熟悉和补充 创建数组(矩阵 ) 创建的ndarray数组…...

element UI 设置type=“textarea“ 禁止输入框缩放
背景 在 Element UI 中,当您使用 el-input 组件并设置 type"textarea" 时,默认情况下,用户可以通过拖动输入框的右下角来调整其大小。如果您想禁止这种缩放行为,需要使用 CSS 来覆盖默认的浏览器行为。 注意上图&#x…...

Rust腐蚀服务器常用参数设定详解
Rust腐蚀服务器常用参数设定详解 大家好我是艾西,一个做服务器租用的网络架构师上期我们分享了rust腐蚀服务器的windows系统搭建方式,其中启动服务器bat参数因为涉及的东西比较多所以想通过这篇文章给大家做一下详细的分享。 (注本文中xxxx…...

无人机巡检技术革命性变革光伏电站运维管理
在中国广袤的大地上,光伏电站如雨后春笋般崛起,晶体硅组件板在阳光下熠熠生辉,为人们带来了源源不断的绿色能源。然而,随着光伏产业的迅猛发展,电站运维管理面临着前所未有的挑战。而无人机巡检技术的引入,…...

【学习】软件信创测试中,如何做好兼容性适配
在软件信创测试的领域中,兼容性适配是至关重要的一环。如何确保软件在不同的操作系统、硬件设备和软件环境中稳定运行,是每个测试人员需要面对的挑战。本文将从几个方面探讨如何做好兼容性适配,以提高软件的稳定性和用户体验。 首先…...
阿里云ACK k8s集群迁移
1、创建k8s集群 阿里云ACK创建 2、创建所需的第三方插件 ACK ingress创建 3、导出原有ACK集群配置 包含deployment、service、ingress、PersistentVolumeClaim 执行命令 kubectl get deployment,service,secret,ingress,PersistentVolumeClaim -n <namespace_name> -o y…...

1.3 字符设备驱动
1、字符设备驱动工作原理 2、file_operations结构体 struct file_operations { struct module *owner; //拥有该结构的模块的指针,一般为THIS_MODULES loff_t (*llseek) (struct file *, lof…...

计算机毕业设计springboot小区物业报修管理系统m8x57
该物业报修管理系统实施的目的在于帮助物业管理企业升级员工管理、住户管理、报修问题管理等内部管理平台,整合物业管理企业物力和人力,全面服务于维修人员管理的内部管理需求,并重视需求驱动、管理创新、与业主交流等外部需求,通过物业管理企业各项资源…...

深度学习体系结构——CNN, RNN, GAN, Transformers, Encoder-Decoder Architectures算法原理与应用
1. 卷积神经网络 卷积神经网络(CNN)是一种特别适用于处理具有网格结构的数据,如图像和视频的人工神经网络。可以将其视作一个由多层过滤器构成的系统,这些过滤器能够处理图像并从中提取出有助于进行预测的有意义特征。 设想你手…...
js 数字的常用方法梳理
toFixed:保留几位小数。toFixed(保留小数位)。注意:不做任何的四舍五入。 Math集合: random:获取一个0-1之间的随机数。注意,包含0,不包含1。 round:四舍五入取整数,最后返回一个整数值。 ceil:向上取整。 floor:…...

STM32H743VIT6使用STM32CubeMX通过I2S驱动WM8978(5)
接前一篇文章:STM32H743VIT6使用STM32CubeMX通过I2S驱动WM8978(4) 本文参考以下文章及视频: STM32CbueIDE Audio播放音频 WM8978 I2S_stm32 cube配置i2s录音和播放-CSDN博客 STM32第二十二课(I2S,HAL&am…...
Objective-C学习笔记(block,协议)4.10
1.block:是一个数据类型,存储一段代码,代码可以有参数有返回值。 2.声明block: 返回值类型 (^block变量名称)(参数列表); int (^myblock) (int num1,int num2); 代码段格式:^返回值类型(参数列表){ 代码段 }; int (^m…...

AD7982BRMZRL7 二进制 500kSPS 模数转换芯片 ADI
AD7982BRMZRL7是一款由Analog Devices(亚德诺)公司生产的18位逐次逼近型模数转换器(ADC)。它主要用于将模拟信号转换为数字信号,适用于数据采集系统、嵌入式系统、工业控制和医疗设备等领域。 AD7982BRMZRL7的主要功能…...

采集某新闻网资讯网站保存PDF
网址:融资总额近3亿美元、药明康德押注,这家抗衰老明星公司有何过人之处-36氪 想要抓取文章内容,但是找不到啊,可能是文字格式的问题,也可能文章内容进行了加密。 在元素中查看,window.initialState返回的就…...

03攻防世界-unserialize3
根据题目可以看出,这是个反序列化的题目 打开网址观察题目可以看到这里是php的代码,那么也就是php的反序列化 本题需要利用反序列化字符串来进行解题,根据源码提示我们需要构造code。 序列化的意思是:是将变量转换为可保存或传输…...
蓝桥杯备考随手记: 常见的二维数组问题
在Java中,二维数组是一种可以存储多个元素的数据结构。它由多个一维数组组成,这些一维数组可以看作是行和列的组合,形成了一个矩阵。 1. 二维数组旋转问题 二维数组的旋转是指将数组中的元素按照一定规则进行旋转。通常有两种常见的旋转方式…...

Java | Leetcode Java题解之第28题找出字符串中第一个匹配项的下标
题目: 题解: class Solution {public int strStr(String haystack, String needle) {int n haystack.length(), m needle.length();if (m 0) {return 0;}int[] pi new int[m];for (int i 1, j 0; i < m; i) {while (j > 0 && needl…...

【数据结构与算法】:二叉树经典OJ
目录 1. 二叉树的前序遍历 (中,后序类似)2. 二叉树的最大深度3. 平衡二叉树4. 二叉树遍历 1. 二叉树的前序遍历 (中,后序类似) 这道题的意思是对二叉树进行前序遍历,把每个结点的值都存入一个数组中,并且返回这个数组。 思路&…...
uniapp——长按识别二维码
说明 转变思路,长按图片,进入预览图片,这时候再长按就可以了。 <view class"codeMain"><view class"codeWhite" longpress"handleLongPress(i.image(qrcode))"><image :src"i.image(qrc…...

云服务器环境web环境搭建之JDK、redis、mysql
一、Linux安装jdk,手动配置环境 链接: https://pan.baidu.com/s/1LRgRC5ih7B9fkc588uEQ1whttps://pan.baidu.com/s/1LRgRC5ih7B9fkc588uEQ1w 提取码: 0413 tar -xvf 压缩包名 修改配置文件/etc/profile 二、安装redis环境 方案一: Linux下安装配置r…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...