python NumPy 1

一、定义

1、概念

         python 的第三方扩展库,用于计算数组。

2、与列表(list)区别

        在 numpy 的数组中,所有元素都必须为相同数据类型(都是整形或都是浮点型)。

        同有切片和索引,在格式上有差异

        在使用前需要导入 numpy包(import numpy as np)--as 是取别名,后面使用numpy可用np代替。

二、ndarray

        NumPy 定义了一个 n 维数组对象,简称 ndarray 对象。

1、array

        创建数组,基本格式为  numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0);

其中 object是一个序列(一般为列表形式)

        dtype = 来指定生成数组的元素数据类型(,copy = 表示数组能否被复制(默认值为True)

        order = 表示选择什么排列方式创建数组(A-默认、C-行、F-列)

        ndmin = 表示选择创建数组的维度

除 object 必须提供,其他都可以默认

arr =numpy.array([1,2,3,4])

print(arr)

#表示其他参数全给默认值,创建一个一维(一行四列)数组 [1 2 3 4]

2、ndim

        查看数组的维度

arr =numpy.array([1,2,3,4])
arr1 =numpy.array([[1,2,3,4],[3,4,5,6]])
print(arr.ndim) # 1
print(arr1.ndim) # 2

3、reshape

        将数组变化维度(个数保持不变),格式为 原数组名称.reshape((行,列),默认参数);在无法确定行列值情况下,可以将其中一个 用 -1 替代;默认参数为 order  排序规则。

arr =numpy.array([1,2,3,4,3,4,5,6])
arr1 =numpy.array([[1,2,3,4],[3,4,5,6]])
print(arr1)
arr2 = arr.reshape((2,4))
print(arr2)
arr2 = arr.reshape((2,4))
print(arr2)
arr3 = arr.reshape((2,-1))
print(arr3)

#将一维数组 arr转化成 二维数组 arr1的形式

#arr3和arr2一样

三、数组属性

1、shape

        shape (无参数括号),作用为返回元组,元组个数为该数组在维度上的个数

 arr =numpy.array([1,2,3,4,3,4,5,6])
arr1 =numpy.array([[1,2,3,4],[3,4,5,6]])
print(arr.shape) #(8,)
print(arr1.shape) #(2, 4)

2、itemsize

        无参数,返回数组每个元素的大小(以字节为单位(配合 dtype )。

arr =numpy.array([1,2,3,4,3,4,5,6],dtype = numpy.int16)
arr1 =numpy.array([1,2,3,4,3,4,5,6],dtype = numpy.float16)
print(arr.itemsize) #  2
print(arr1.itemsize) # 2

3、flags

        无参数,返回数组的内存(C_CONTIGUOUS  行排列;F_CONTIGUOUS 列排列 ;OWNDATA  True表示数据为自己拥有;WRITEABLE  True表示数据可写,False 表述只读;ALIGNED True 表示数据对齐;UPDATEIFCOPY、WRITEBACKIFCOPY   True表示通过copy创建的,回写到原始数组)

 arr =numpy.array([1,2,3,4,3,4,5,6])
print(arr.flags)
# C_CONTIGUOUS: True
# F_CONTIGUOUS: True
# OWNDATA: True
# WRITEABLE: True
# ALIGNED: True
# WRITEBACKIFCOPY: False

四、除array外的创建方法

1、empty

        创建指定形状和指定数据类型(可省略,默认为小数)的数组(元素随机)。格式为 numpy.empty(shape, dtype = float, order = 'C')

arr1 = numpy.empty((3,2))
print(arr1) 

# [[ 5.03506487e+175  1.75631032e-152]
#  [-4.51787738e+198  4.04872553e-309]
#  [ 4.93854310e+180  3.69028917e+180]]

2、zeros 和 ones

         作用同empty,创建的元素全是0 和1:

arr1 = numpy.zeros((3,2))
arr2 = numpy.ones((3,2))
print(arr1)
# [[0. 0.]
#  [0. 0.]
#  [0. 0.]]
print(arr2)
# [[1. 1.]
#  [1. 1.]
#  [1. 1.]]

 3、arange

        等python普通的生成一个序列作用,在numpy中为生成数组,格式:numpy.arange(start, stop, step, dtype),默认不包含stop 。

arr1 = numpy.arange(0,10,1)
print(arr1) # [0 1 2 3 4 5 6 7 8 9]
arr2 = numpy.arange(10,0,-1)
print(arr2) # [10  9  8  7  6  5  4  3  2  1]
arr3 = numpy.arange(0,10,2)
print(arr3) # [0 2 4 6 8]]

4、linspace

        在指定区间(默认两个点都在),均匀将长度分为 num 份数。格式为:numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

start,stop :区间的起点和终点

num :将区间均匀分割份数

endpoint:默认 True  表示包含终点

retstep :默认 False 表示不返回步长

 计算公式:如果 endpoint =False :(stop-start)/num 
                   如果 endpoint=True: (stop-start)/(num-1)

 arr1 = numpy.linspace(0,10,num=5)
print(arr1) # [ 0.   2.5  5.   7.5 10. ]
arr1 = numpy.linspace(0,10,num=5,endpoint=False)
print(arr1) # [0. 2. 4. 6. 8.]
arr1 = numpy.linspace(0,10,num=5,retstep=True)
print(arr1) 
# (array([ 0. ,  2.5,  5. ,  7.5, 10. ]), np.float64(2.5))

五、切片

1、普通切片

        和列表切片操作一样,使用[start:stop:step] ,多维数组则用[start:stop:step,start:stop:step] 的形式。

一维数组:切片即使行又是列,根据数组定义

arr = numpy.array([1,2,3,4,5])
print(arr)
print(arr[1])  # 第二列元素  2
print(arr[1:])  # 第二列元素到最后列的所有元素  [2 3 4 5]
print(arr[1:4:2])  # 第2列到第五列的数据,按照步长为2跳列获取  [2 4]

二维数组:第一个 start:stop:step 为行切片,第二个为 列切片

arr = numpy.array([[1,2,3,4,5],[11,12,13,14,15]])
print(arr)
print(arr[1])  # 第二行所有元素  [11 12 13 14 15]
print(arr[1,...])  # ... 等同这个取所有
print(arr[1,1])  # 第二行第二列的元素  12
print(arr[1:4:2,1:4:2])  #行列都按照从第二开始到第五结束,步长为2 [[12 14]]

三维数组:根据 start:stop:step,start:stop:step,start:stop:step 的方式切割

arr = numpy.array([[[1,2,3,4],[5,6,7,8]],[[11,12,13,14],[15,16,17,18]]])
print(arr)
print(arr[1,1])  # 第二行第二列的所有元素  [15 16 17 18]
print(arr[1,1,1])  # 第二行第二列的第二位元素  16

 2、slice

        格式:slice(start,stop,step) 

一维数组:

arr = numpy.array([1,2,3,4,5])
arr1 =arr[slice(0,len(arr),2)]
print(arr1) # [1 3 5]

多维数组还是用第一个方法方便

 六、高级索引

 1、整数数组索引

        使用一个数组来访问另一个数组的元素(通过该元素的行列值确定);

        格式:数组变量名称[[行标1,行标2],[列标1,列标2]] --索引位置便是(行标1,列标1),(行标2,列标2)

arr = numpy.array([[1,2,3,4],[5,6,7,8]])
arr1 = arr[[0,1,1],[3,1,2]]
print(arr1) # [4 6 7] (0,3)\(1,2)\(1,2)

 高维度数组索引在原二维索引基础上继续添加索引标识  [[行标1,行标2],[列标1,列标2],[深层1,深层2]] --(行标1,列标1,深层1),(行标2,列标2,深层2)

 arr = numpy.array([[[1,2,3,4],[5,6,7,8]],[[11,12,13,14],[15,16,17,18]]])
arr1 = arr[[0,1,1],[1,1,1]]
print(arr1)
# [[ 5  6  7  8]
#  [15 16 17 18]
#  [15 16 17 18]]
arr2=arr[[0,1,1],[1,1,1],[0,2,1]]
print(arr2) # [ 5 17 16]

2、布尔索引

         通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组(不用处理原数组的维度);直接返回的是原数组位置的值变为Ture 或者 False;在原数组再次调用下,得带最终一维数组。

一维数组

arr = numpy.array([1,2,3,4,5])
arr1 = arr>3
print(arr1) # [False False False  True  True]
arr2 = arr[arr>3]  #原数组调用结果
print(arr2) # [4 5]

二维数组及以上

arr = numpy.array([[1,2,3,4],[5,6,7,8]])
arr1 = arr>3
print(arr1)
# [[False False False  True]
#  [ True  True  True  True]]
arr2 = arr[arr>3] #原数组调用结果
print(arr2) #[4 5 6 7 8]

七、广播

        对不同形状(shape)的数组进行数值计算的方式,体现在相应位置的元素计算。

维度匹配:如果两个数组的维度数不同,维度数较少的数组会在前面补上长度为 1 的维度。

长度匹配:如果两个数组在某个维度上的长度不同,但其中一个数组在该维度上的长度为 1,则该数组会沿着该维度进行广播。

不匹配:如果两个数组在某个维度上的长度既不相同也不为 1,则广播失败,抛出 ValueError。

数组加标量:元素分别加上标量(高维度也是)

arr = numpy.array([1,2,3,4,5])
arr1 = arr+2
print(arr1) # [3 4 5 6 7]

一维数组加一维数组:元素对应

 arr = numpy.array([1,2,3,4,5])
arr1 = numpy.array([1,2,3,4])
arr2 = arr+arr1
print(arr2)

# operands could not be broadcast together with shapes (5,) (4,) 

 arr = numpy.array([1,2,3,4,5])
arr1 = numpy.array([1,2,3,4,5])
arr2 = arr+arr1
print(arr2)# [ 2 4 6 8 10]

 一维数组加二维数组:列数或行数对应,相当于将高维度拆分成多个相同的低维度相加,最后在组成新的高维度数组

arr = numpy.array([1,2,3,4,5])
arr1 = numpy.array([[1,2,3,4,5],[11,12,13,14,15]])
arr2 = arr+arr1
print(arr2)
# [[ 2  4  6  8 10]
#  [12 14 16 18 20]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/453542.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图的最小生成树算法--普里姆(Prim)算法和克鲁斯克尔(Kruskal)算法

一、图的最小生成树 最小生成树(Minimum spanning tree,MST)是最小权重生成树(Minimum weight spanning tree)的简称,是一个连通加权无向图中一棵权值最小的生成树。 在一给定的无向图 G ( V , E ) G …

探索 Jupyter 笔记本转换的无限可能:nbconvert 库的神秘面纱

文章目录 探索 Jupyter 笔记本转换的无限可能:nbconvert 库的神秘面纱背景:为何选择 nbconvert?库简介:nbconvert 是什么?安装指南:如何安装 nbconvert?函数用法:简单函数示例应用场…

MySQL企业常见架构与调优经验分享

文章目录 一、选择 PerconaServer、MariaDB 还是 MYSQL二、常用的 MYSQL 调优策略三、MYSOL 常见的应用架构分享四、MYSOL 经典应用架构 观看学习课程的笔记,分享于此~ 课程:MySQL企业常见架构与调优经验分享 mysql官方优化文档 一、选择 PerconaServer、…

全方面熟悉Maven项目管理工具(二)坐标、pom.xml文件的解读!

1. 坐标(核心概念) 1.1 数学中的坐标 使用 x、y、z 三个向量作为空间的坐标系,可以在空间中唯一的定位到一个点 1.2 Maven 中的坐标 1.2.1 向量说明: 使用三个向量在 Maven的仓库 中唯一的定位到一个 jar 包 groupId&#xf…

【某农业大学计算机网络实验报告】实验四 路由信息协议RIP

实验目的: 1.深入了解RIP协议的特点和配置方法:通过此次实验,掌握RIP协议作为一种动态路由协议的基本工作原理,了解其距离向量算法的核心概念,以及如何在网络设备上配置RIP协议; 2.验证RIP协议…

AndroidStudio实验报告——实验一、二

目录 实验一: AS安装与安卓环境搭建 一、实验目标 二、实验内容 (一)Android Studio安装 (二)JDK安装与配置 (三)Android SDK安装与配置 三、实验结果:(实…

【Java】正则表达式详解

目录 引言 一、基本概念 1.1 元字符 1.2 预定义字符类 1.3 边界匹配符 1.4 数量标识符 1.5 捕获与非捕获分组 二、Java中的正则表达式支持 三、正则表达式的使用示例 3.1 匹配字符串 3.2 替换字符串 3.3 分割字符串 3.4 使用Pattern和Matcher 3.5 捕获组和后向…

局域网——Prim Kruskal

题目 Prim &#xff08;生成一颗包含起点的最小生成树&#xff0c;所以要多次调用&#xff09; #include <bits/stdc.h>using namespace std;const int N 510; const int inf 0x3f3f3f3f;int n, m; int g[N][N], dis[N]; bool p[N], vis[N];int prim (int u) {memset(…

分布式检测线路、精准定位故障:输电线路故障定位监测系统

分布式检测线路、精准定位故障&#xff1a;输电线路故障定位监测系统 随着电力行业的快速发展和电网规模的不断扩大&#xff0c;输电线路作为电力传输的“生命线”&#xff0c;其安全稳定运行对于保障电力供应、促进经济社会发展具有重要意义。然而&#xff0c;输电线路通常暴…

[云] Deploying Your First Serverless Application

• Goal: • Hands-on lab to get started with Serverless • Agenda: • Deploying Your First Serverless Application • Assignment Introduction Create and test function in AWS Lambda • Lets create an addition function using AWS Lambda. • To create the addi…

HCIP-HarmonyOS Application Developer 习题(十六)

&#xff08;判断&#xff09;1、HiLink通过分布式软总线的方式连接所有设备&#xff0c;强能力设备可对弱能力设备进行设备虚拟化&#xff0c;将弱设备当做本机设备直接调用。 答案&#xff1a;错误 分析&#xff1a;HiLink 主要针对的是应用开发者与第三方设备开发者&#xf…

100种算法【Python版】第1篇——贪心策略

贪心是一种策略 1 策略内核1.1 基本思想1.2 策略步骤1.3 贪心算法举例说明1.3.1 活动选择问题1.3.2 01背包问题1.3.3 最优解分析 2 贪心策略的应用2.1 应用&#xff1a;计算单源最短路径2.2 应用&#xff1a;霍夫曼编码字符串 3 策略优缺点3.1 优点3.2 缺点3.3 总结 1 策略内核…

助力语音技术发展,景联文科技提供语音数据采集服务

语音数据采集是语音识别技术、语音合成技术以及其他语音相关应用的重要基础。采集高质量的语音数据有助于提高语音识别的准确性&#xff0c;同时也能够促进语音技术的发展。 景联文科技作为专业的数据采集标注公司&#xff0c;支持语音数据采集。可通过手机、专业麦克风阵列、专…

快速了解Python流程控制语句基本使用

&#x1f600;前言 在编程中&#xff0c;流程控制语句是用于控制程序执行顺序的关键部分。通过条件判断和循环机制&#xff0c;程序能够根据不同的情况选择执行特定的代码块&#xff0c;或重复执行某段代码。本文将详细介绍 Python 中常见的流程控制语句&#xff0c;包括 if、i…

JS事件和DOM

1. DOM 1.1 基本概念 DOM&#xff0c;全称 Document Object Model&#xff0c;即文档对象模型。它是 Web 上最常用的 API 之一&#xff0c;是加载在浏览器中的文档模型&#xff0c;可以将文档表示为节点树&#xff08;或称 DOM 树&#xff09;&#xff0c;其中每个节点代表文…

缓存常见问题:缓存穿透、雪崩、击穿及解决方案分析

1. 什么是缓存穿透&#xff0c;怎么解决&#xff1f; 缓存穿透是指用户请求的数据在缓存中不存在即没有命中&#xff0c;同时在数据库中也不存在&#xff0c;导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据&#xff0c;会导致短时…

Java面试场景题(1)---如何使用redis记录上亿用户连续登陆天数

感谢uu们的观看&#xff0c;话不多说开始~ 对于这个问题&#xff0c;我们需要先来了解一下~ 海量数据都可以用bitmap来存储&#xff0c;因为占得内存小&#xff0c;速度也很快 我大概计算了一下~ 完全够&#xff1a;String类型512M 1byte 8个bit位 8个状态 512M1024byt…

计算机组成原理(笔记7高速缓冲存储器Cache,计算机组成原理的重难点全、直接、组相连)

为什么要设立高速缓冲存储器 &#xff08;Cache&#xff09;&#xff1f; Cache是介于CPU和主存之间的小容量存储器&#xff0c;存取速度比主存快。它能高速地向CPU提供指令和数据&#xff0c;加快程序的执行速度。它是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。…

01 一篇读懂25机械考研复试超全流程讲解|考研面试经验和面试真题快来背诵!

复试面试流程及经验汇总篇 千万不要小瞧出成绩前的准备以及最常见面试问题你提前熟记于心&#xff0c;面试再遇到&#xff0c;能够有逻辑有条理的回答出不是空洞的话&#xff0c;给导师的印象分就肯定高。 考研复试面试最全最完整的实用攻略&#xff0c;从出考研初试成绩前到…

《深度学习》模型的部署、web框架 服务端及客户端案例

目录 一、模型的部署 1、模型部署的定义与目的 1&#xff09;定义 2&#xff09;目的 2、模型部署的步骤 1&#xff09;导出模型 2&#xff09; 部署模型 3&#xff09;测试模型 4&#xff09;监控模型 3、模型部署的方式 1&#xff09;云端部署 2&#xff09;嵌入…