Numpy数组基础操作

1.创建数组

import numpy as np
# ————创建数组————
np.array([1,2,3,4])
np.array(range(10))# 迭代对象
np.array([i for i in range(10) if i%2==0]) #列表,[]列表推导式返回列表
np.array([i for i in range(10) if i%2==0]) #()# 生成器,列表推导式返回生成器

a = np.array([1.1,2.2,3.3],dtype='int') #强制使用int类型
b = np.array(a, copy=False) # copy为False 不会发生深拷贝,不创建副本
b = a.copy() # 深拷贝
np.array([1,2,3],ndmin=2) #ndmin指定维度,reshape方法可以修改维度
np.array(np.mat([1,2,3]),subok=True) #subok保持原类型(如矩阵mat)

2.快速生成数组

#————快速生成数组————
# np.arange()生成np数组
np.arange(1,10,2) # [1,10) step=2
np.arange(4.2,dtype='float') # 可以有浮点类型
# 生成数目:ceil(stop-start)/step) 浮点数的不精确可能导致数目意料之外的结果

#np.linspace()生成等差np数组
np.linspace(1,10,num=2,endpoint=True,dtype='float')
# endpoint=True表示生成数组包含stop=10,生成num个元素的数组,类型为dtype

#np.logspace()生成等比数列数组
np.logspace(0,9,10,base=2,endpoint=True,dtype='float') #等价于2**linspace(0,9,10,dtype='float')

#np.zeros()生成零数组、np.ones()生成全1数组
a=np.array([1,2,3])
np.zeros((2,2),dtype='int')
np.zeros_like(a) #(3,)

3.数组属性


# ————数组属性————
m = np.array([[1,2,3],[4,5,6]])
print(m.ndim)#维数

print(m.shape)#数组的 维度、形状
n1 = m.reshape((3,2)) # 改变shape,不改变原数组,返回副本

print(m.size)#元素总数
n2 = np.resize((2,6)) # 改变size,不改变原数组,返回副本,用原数组填充
#通常是使用resize改变数组的尺寸大小;使用reshape用来增加数组的维度,不改变数组数组数据

print(m.dtype)#类型
n3 = m.astype('float32') ## 改变type,不改变原数组,返回副本
np.array([1,2,3,'4']) # 不指定dtype,按照最大的类型进行安排
np.array([[1,2,3],('a','b','c','d')]) #不指定dtype,维度间元素数量不匹配的退化为一维,dtype为object
np.array([1,2,3],(1,2,3)) #二维

print(m.itemsize)#每个元素所占字节大小

4.数据类型和结构化数据

# numpy数据类型
# str_和string_区别
str1 = np.array([1,2,3,4,5,6],dtype=np.str_)
string1 = np.array([1,'abcd',3,4,5,6],dtype=np.string_)
str2 = np.array(['我们',2,3,4,5,6],dtype=np.str_)
# string2 = np.array(['我们',2,3,4,5,6],dtype=np.string_)
print(str1,str1.dtype)
print(string1,string1.dtype)
print(str2,str2.dtype)
# ['1' '2' '3' '4' '5' '6'] <U1
# [b'1' b'abcd' b'3' b'4' b'5' b'6'] |S4
# ['我们' '2' '3' '4' '5' '6'] <U2

#定义结构化数据
teacher1 = np.dtype([('name','U5'),('salary','f4')])
t = np.array([('zf',6000.5),('fz',7000)],dtype=teacher1)
t

5.索引和切片

#切片索引
# 一维
ar1 = np.array(range(10))
ar1[1:6:1] # start:stop:step 不包括stop,负数表示从尾部或逆向step
ar1[[0,3,4]] # 选取第0、3、6个元素
# 二维
ar2 = np.array(range(20)).reshape(5,4)
ar2[0] #取第一维数组
ar2[0][1] #二次索引 ,取第一维第二个元素
ar2[::-1][0::1]# 二次索引,从第一次所选的结果里在此选择,都可以使用start:stop:step
ar2[:,3] # 逗号分隔每个维度 还可以用...代表全选 
ar2[[0,1,0,1],[0,1,2,3]] # 整数数组索引(0,0),(1,1),(0,2),(1,3),数量要对应,除非有一个[]里是一个
ar2[(ar2>2) & (ar2<8)] # 布尔索引
ar2[[True,True,True,True,False]][[False, True,False, True]]

np.s_[1:4,2:6] # 生成索引
np.r_[1:4,2:6] #在行上连接切片
np.c_[1:4,2:5] #在列上连接切片

6.数组方法

# 操作数组的方法
a = np.array([[1,2,3],[4,5,6]])
b = np.resize(a,(3,3)) #维度不够用原数组补齐

a = np.array([[1,2,3],[4,5,6]])
np.append([[1,2,3],[1,2,3]],[0,1,0,1]) # 返回一维数组
np.append([[1,2,3],[1,2,3]],[[4,5],[4,5]],axis=1) # 沿列添加
np.append([[1,2,3],[1,2,3]],[[4,5,6],[4,5,6]],axis=0) #沿行添加

a = np.array([[1,2],[3,4],[5,6]])
print (np.insert(a,1,[[11,12]],axis = 0)) #在1位置,按行添加[[11,12]],不加axis展开为1维

x = np.arange(6).reshape(2,3)
x1 = np.argwhere(x>1) #返回数组中非零元素索引

a=np.array([5,2,6,2,7,5,6,8,2,9])
a1 = np.unique(a) # 对a数组的去重
a2,ids2 = np.unique(a,return_index=True) #返回去重后数组在原数组的索引
a3,ids3 = np.unique(a,return_inverse=True) #返回去原数组在去重后数组的索引
a4,nums = np.unique(a,return_counts=True) #返回去重数组出现次数

a = np.array([[3,7,5],[6,1,4],[4,7,9]]) 
a1 = np.sort(a) #默认按最后一个轴方向排
a2 = np.sort(a,axis=0) # 在列内排
a3 = np.sort(a,axis=0) # 在行内排
# 此外,kind参数表示排序方法,order表示按属性名(某个字段排序)
t = np.dtype([('name','U5'),('age',int)])
a4 = np.array([('zf',22),('yx',20),('kq',19)],dtype=t)
np.sort(a4,axis=0,order='name')
#np.argsort()返回排序好的在原数组的元素索引 

7.广播机制

b = np.delete(a,[1,2],axis = 0)# 返回新数组,按行删除数组1、2行,不加axis展开为1维
# 广播机制
# 形状不相同的数组进行运算时采用广播机制使数组形状相同
# 维度不相同,在低纬度形状左边加1 (3,)->(1,3)
# 数组形状沿着某个长度为1的维度扩展,去匹配另一个数组
# 任意维度不匹配且没有一个维度为1,无法广播
# 另一种简单理解
# - 将两个数组的维度大小右对齐,然后比较对应维度上的数值,
# - 如果数值相等或其中有一个为1或者为空,则能进行广播运算,
# - 输出的维度大小为取数值大的数值。否则不能进行数组运算。
a = np.array([1,2,3])
b = np.ones((3,3))
a+b

8.统计函数和相关分布的随机函数

# 统计函数
# 平均数
a = np.arange(20).reshape(4,5)
a.mean() # 全部元素的平均值
a.mean(axis=0) # 按列求平均值
a.mean(axis=1) # 按行求平均值
# 中位数
np.median(a)
np.median(a,axis=0)
np.median(a,axis=1)
# 标准差
np.std(a)# 也可以有axis参数
# 方差
np.var(a)# 也可以有axis参数
# 最值和求和 有axis参数
a.max()
a.min()
a.sum()
# 平均数
# 可以有axis参数、weight参数表示权重,默认权重都是1

# 随机函数
np.random.seed(1)# 对每一个随机函数前都设置一个随机种子,结果在多次运行后会一致
np.random.rand(4,2) # 生成4行2列[0,1)均匀分布随机浮点数
np.random.sample((4,2))# 生成4行2列[0,1)均匀分布随机浮点数数,函数内部使用rand()
np.random.randint(low =1,high=11,size=1000) #生成[0,low)(未说明high)或[low,high) size形状的均匀分布整数随机数
np.random.randn(4,2) # 生成4行2列[0,1)标准正态分布随机数
np.random.normal(loc=0,scale=1,size=(3,4))# # # 生成3行4列[0,1)N(loc,scal^2)正态分布随机数

9.读取文件

# 读取文件
# 文件内容: 1 2 3 4
d1 = np.loadtxt('data1.txt',dtype=np.int32)
# 文件内容: 1,2,3,4
d1 = np.loadtxt('data2.csv',dtype=np.int32,delimiter=',')
# 文件内容:姓名 工资
#           zf  6000
#           fz  7000
teacher1 = np.dtype([('name','U5'),('salary','f4')])
d2 = np.loadtxt('teachers.txt',dtype=teacher1,encoding='utf-8',skiprows=1)# skiprows=1 跳过一行
# 此外usecols=(1,3)表示读取第1、3列(从0计)
# 参数converters={1:myfun1,3:myfun2}表示第1列的值作用自定义函数myfun1,可用于缺失值处理

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

消防认证-防火窗

一、消防认证 消防认证是指消防产品符合国家相关技术要求和标准&#xff0c;且通过了国家认证认可监督管理委员会审批&#xff0c;获得消防认证资质的认证机构颁发的证书&#xff0c;消防产品具有完好的防火功能&#xff0c;是住房和城乡建设领域验收的重要指标。 二、认证依据…

绝地求生PUBG没有开始游戏按钮的解决办法

绝地求生是一款特别热门的战术竞技型射击类游戏&#xff0c;游戏中玩家需要在游戏地图上收集各种资源&#xff0c;并在不断缩小的安全区域内持武器对抗其他玩家&#xff0c;让自己生存到最后。当游戏最后场上只剩下一支队伍的时候即可获得游戏胜利。然而一些玩家在游玩绝地求生…

深入探索 Python 中的数据维数:高维数据处理方法与应用

Python 数据维数 在数据科学和机器学习领域&#xff0c;理解数据的维度是至关重要的。Python作为一种强大而灵活的编程语言&#xff0c;提供了丰富的工具和库来处理各种维度的数据。本文将介绍Python中数据维数的概念&#xff0c;以及如何使用Python库来处理不同维度的数据。 什…

YARN运行流程源码分析

一、yarn任务执行流程图 在分析任务之前先走一下yarn内部的流程细节。 二、RM 内部处理提交阶段运行流程 如上图流程所示&#xff1a; 1.client 提交任务给yarn&#xff0c;yarn 这边会获取任务的AM相关资源&#xff0c;client在提交阶段会上传job.split &#xff08;数据切分…

SpringCloud第一篇Docker基础

文章目录 一、常见命令二、数据卷三、数据挂载四、自定义镜像五、网络 一、常见命令 Docker最常见的命令就是操作镜像、容器的命令&#xff0c;详见官方文档&#xff1a; https://docs.docker.com/ 需求&#xff1a; 在DockerHub中搜索Nginx镜像&#xff0c;查看镜像的名称 …

企业如何从无序管理走向精益生产管理?

先来看看企业生产管理无序的弊端有哪些&#xff1f; 数据统计不及时&#xff1a;纸质生产工单&#xff0c;数据难统计&#xff0c;各业务环节问题难定位&#xff0c;影响车间生产效率。生产过程不透明&#xff1a;生产过程数据难监控&#xff0c;生产派工管理混乱&#xff0c;…

百度网盘非会员,享受视频倍速

百度网盘会员过期了&#xff0c;看视频不能倍速很难受&#xff0c;下面就是跨过会员机制&#xff0c;享受倍速的方法。 Edge浏览器 在浏览器设置中找到扩展选项 在扩展中搜索视频速度控制 global speed&#xff0c;安装后即可使用

在Linux操作系统中去修复/etc/fstab文件引起的系统故障。

如果/etcfstab文件中发生错误&#xff0c;有可能导致系统无法正常启动。 比如&#xff1a;系统里的一块磁盘被删除&#xff0c;但是/etc/fstab中关于这块磁盘的信息依然被保存在文件/etc/fstab中。 主要看倒数后两行&#xff0c;系统提示&#xff0c;敲ctrlD或者是直接输入密码…

2通道音频ADC解码芯片ES7243L、ES7243E、ES7243,用于低成本实现模拟麦克风转换为IIS数字话筒

前言&#xff1a; 音频解码芯片某创参考价格&#xff1a; ES7243L 500&#xff1a;&#xffe5;1.36 / 个 ES7243E 500&#xff1a;&#xffe5;1.66 / 个 ES7243 500&#xff1a; &#xffe5;1.91 / 个 其中ES7243L工作电压为1.8V&#xff0c;与其他两款的3.3V工作电压不同&…

推荐3款免费电脑工具

Tools-Web Tools-Web是一个在线工具箱&#xff0c;提供丰富的工具和功能&#xff0c;适用于日常工作和学习。根据用户评价&#xff0c;Tools-Web的工具种类丰富且操作简单&#xff0c;是日常工作和学习的好帮手。该工具箱涵盖了开发运维、文本处理、图片处理、图表处理、随机工…

大模型知识问答: 文本分块要点总结

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…

昇思MindSpore学习笔记6-01LLM原理和实践--FCN图像语义分割

摘要&#xff1a; 记录MindSpore AI框架使用FCN全卷积网络理解图像进行图像语议分割的过程、步骤和方法。包括环境准备、下载数据集、数据集加载和预处理、构建网络、训练准备、模型训练、模型评估、模型推理等。 一、概念 1.语义分割 图像语义分割 semantic segmentation …

【易捷海购-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

【2024华为HCIP831 | 高级网络工程师之路】刷题日记(BGP)

个人名片:🪪 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️ 零基础学Java——小白入门必备🔥重识C语言——复习回顾🔥计算机网络体系———深度详讲HCIP数通工程师-刷题与实战🔥🔥

windows obdc配置

进入控制面板&#xff1a; 进入管理工具&#xff1a;

java —— JSP 技术

一、JSP &#xff08;一&#xff09;前言 1、.jsp 与 .html 一样属于前端内容&#xff0c;创建在 WebContent 之下&#xff1b; 2、嵌套的 java 语句放置在<% %>里面&#xff1b; 3、嵌套 java 语句的三种语法&#xff1a; ① 脚本&#xff1a;<% java 代码 %>…

顶会FAST24最佳论文|阿里云块存储架构演进的得与失-4.EBS不同架构性能提升思路

3.1 平均延迟与长尾延迟 虚拟磁盘&#xff08;VD&#xff09;的延迟是由其底层架构决定的&#xff0c;具体而言&#xff0c;取决于请求所经历的路径。以EBS2为例&#xff0c;VD的延迟受制于两跳网络&#xff08;从BlockClient到BlockServer&#xff0c;再至ChunkServer&#x…

机器学习统计学基础 - 最大似然估计

最大似然估计&#xff08;Maximum Likelihood Estimation, MLE&#xff09;是一种常用的参数估计方法&#xff0c;其基本原理是通过最大化观测数据出现的概率来寻找最优的参数估计值。具体来说&#xff0c;最大似然估计的核心思想是利用已知的样本结果&#xff0c;反推最有可能…

零知识证明技术:隐私保护的利器

在当今信息时代&#xff0c;数据安全和隐私保护的重要性日益凸显。随着技术的发展&#xff0c;密码学在保障信息安全方面发挥着越来越重要的作用。其中&#xff0c;零知识证明技术作为一种新兴的密码学方法&#xff0c;为隐私保护提供了强有力的支持。本文将简要介绍零知识证明…

一.4 处理器读并解释储存在内存中的指令

此刻&#xff0c;hello.c源程序已经被编译系统翻译成了可执行目标文件hello&#xff0c;并被存放在硬盘上。要想在Unix系统上运行该可执行文件&#xff0c;我们将它的文件名输入到称为shell的应用程序中&#xff1a; linux>./hello hello, world linux> shell是一个命令…