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.mzph.cn/pingmian/43085.shtml

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

相关文章

Pytorch框架权重文件转onnx格式

Pytorch框架权重文件转onnx格式 代码案例 import torch import torchvision.models as modelsmodel models.resnet50() model.load_state_dict(torch.load("./model/pytorch-resnet50.pth"))model.eval() example_input torch.randn(32, 3, 224, 224) # 根据模型…

transformer网络学习

Transformer encoder-decoder模型之间共享的是Encoder最后一层输出的hidden-state。 GitHub - huggingface/transformers: &#x1f917; Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX. Bert2Bert中&#xff0c;Encoder的hidden-state同…

昇思25天学习打卡营第10天|ShuffleNet图像分类

ShuffleNet网络结构 ShuffleNet是一种专为移动设备设计的、计算效率极高的卷积神经网络&#xff08;CNN&#xff09;架构。其网络结构的设计主要围绕减少计算复杂度和提高模型效率展开&#xff0c;通过引入逐点分组卷积&#xff08;Pointwise Group Convolution&#xff09;和…

AutoX.js从某音分享链接解析出视频ID

背景 从某音分享的链接中解析出数字的videoID&#xff0c;用来做评论Intent跳转 思路 基本所有的短链接都是302跳转或者js跳转&#xff0c;熟悉http协议都知道&#xff0c;当状态码为302&#xff0c;从headers中提取Location即刻获得视频的原链接 链接中就带有videoId 要注意…

【大模型LLM面试合集】大语言模型基础_Word2Vec

Word2Vec 文章来源&#xff1a;Word2Vec详解 - 知乎 (zhihu.com) 1.Word2Vec概述 Word2Vec是google在2013年推出的一个NLP工具&#xff0c;它的特点是能够将单词转化为向量来表示&#xff0c;这样词与词之间就可以定量的去度量他们之间的关系&#xff0c;挖掘词之间的联系。 …

Java之父James Gosling宣布正式退休 创造无数人的饭碗

编程语言Java的创始人&#xff0c;被誉为“Java之父”的James Gosling&#xff0c;近日在社交媒体上宣布了自己正式退休的消息。Gosling表示&#xff1a;“我终于退休了。做了这么多年的软件工程师&#xff0c;现在是时候享受人生了。”他透露&#xff0c;在亚马逊的过去7年是非…

提高LabVIEW软件通用性的方法

提高LabVIEW软件通用性的方法 在使用LabVIEW开发软件时&#xff0c;提高软件的通用性非常重要。通用性意味着软件可以在不同的应用场景中使用&#xff0c;具备高度的适应性和灵活性&#xff0c;从而提高软件的价值和用户满意度。以下从多个角度详细探讨如何提高LabVIEW软件的通…

Java 反射相关的面试题

Java 创建对象有几种方式&#xff1f; new 创建新对象 通过反射创建对象 采用 clone 机制 通过序列化机制 使用 new 关键字 public class MyClass {public MyClass() {System.out.println("MyClass object created!");} }public class Main {public static voi…

太实用了吧?手把手教你华为eNSP模拟器桥接真实网络!

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 晚上好&#xff0c;我的网工朋友。 今天聊聊eNSP桥接正式网络&#xff0c;就是把eNSP桥接进真实的网络&#xff0c;利用我们的物理网卡通过实体路…

Unity Text Mesh Pro 中英文混编自动换行问题

问题描述 使用TextMeshPro 输入中英文时&#xff0c;在一行内 输入中英文&#xff0c;当英文部分超过第一行剩余位置时&#xff0c;整个英文部分都会自动换行 问题截图&#xff1a; 期待截图&#xff1a; 问题说明 因为 TextMeshPro识别中文后会带换行符。 解决方案 修改…

GEE代码实例教程详解:降水量异常分析

简介 在本篇博客中&#xff0c;我们将通过Google Earth Engine (GEE) 分析特定区域内的降水量异常。利用UCSB-CHG提供的CHIRPS&#xff08;Climate Hazards Group InfraRed Precipitation with Station data&#xff09;数据集&#xff0c;我们可以监测2000年至2020年期间的降…

人员定位系统的功能,你知道多少呢?

在此前的文章中&#xff0c;说到了人员定位系统用于化工厂定位这一用途来完善工厂管理&#xff0c;但同时&#xff0c;基于人员定位系统的强大功能&#xff0c;该系统的应用范围也要宽范的多&#xff0c;那么&#xff0c;本篇文章就来为大家介绍一下吧。 人员定位系统的功能简介…

C++、QT企业管理系统

目录 一、项目介绍 二、项目展示 三、源码获取 一、项目介绍 人事端&#xff1a; 1、【产品中心】产品案列、新闻动态的发布&#xff1b; 2、【员工管理】新增、修改、删除、搜索功能&#xff1b;合同以图片的方式上传 3、【考勤总览】根据日期显示所有员工上班、下班时间…

[每周一更]-(第104期):Go中使用Makefile的经验

文章目录 1. 项目结构2. Makefile的基础知识什么是 Makefile 3. Go项目的Makefile示例4. 详细解释每个Makefile目标5. 使用Makefile执行常见任务 在Go项目中&#xff0c;使用Makefile可以简化和自动化常见的开发和部署任务&#xff0c;如编译、测试、格式化和清理。深入认识及实…

javascript如何实现两个变量值互换

javascript如何实现两个变量值互换。 核心思路是在定义第三个变量 第一个变量值赋值给第三个变量 第二个变量赋值给第一个变量 第三个变量值赋值给第二个变量 代码如下 var a10 var b20 var c ca ab bc

SRS流媒体服务器概述

SRS/5.0(Bee) is a simple, high efficiency and realtime video server, supports RTMP, WebRTC, HLS, HTTP-FLV, SRT, MPEG-DASH and GB28181. 翻译&#xff1a;SRS/5.0(Bee)是一款简洁、高效、实时的视频服务器&#xff0c;支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DAS…

Ubuntu开源软件LibreOffice将Excel多表转PDF多目录示例

一、实现的起因&#xff1a; Windows平台下&#xff0c;常见的WPS办公自动化套件中电子表格软件&#xff0c;其中具备将Excel工作表中数据转为PDF文档表格的功能。现在进一步的需求是&#xff1a;像PDF标准的电子书那样&#xff0c;具备一本书的目录结构或章节结构&#xff0c…

怎么才能选到好的猫咪主食冻干?公认顶尖优秀主食冻干总结

如今&#xff0c;主食冻干市场纷繁多样&#xff0c;质量水平却大相径庭。部分品牌盲目追求高营养值和利润增长&#xff0c;却忽略了猫咪健康饮食的本质需求&#xff0c;导致市场上充斥着以次充好、虚假标注日期等不法行为。更有甚者&#xff0c;部分产品未经权威第三方检测便匆…

vue安装总是失败原因剖析

今天要用vue2的环境开发&#xff0c;当前环境是vue3。 错误尝试&#xff1a; 直接在应用里面卸载nodejs&#xff0c;然后安装新的nodejs。这样做会出现node与npm都安装成功&#xff0c;但是vue怎么都安装不成功。这时我还怀疑是环境变量等的问题&#xff0c;结果设置完还是不起…

Docker——简介、安装(Ubuntu22.04)

1、简介 Docker 是一个开源的容器化平台&#xff0c;旨在简化应用程序的开发、交付和运行。它通过将应用程序及其所有依赖项打包到一个称为容器的标准化单元中&#xff0c;使应用程序能够在任何环境中一致地运行。Docker 解决了“在我的机器上能运行”的问题&#xff0c;使开发…