Python:处理矩阵之NumPy库(上)

目录

        1.前言

        2.Python中打开文件操作

        3.初步认识NumPy库

        4.使用NumPy库

        5.NumPy库中的维度

        6.array函数

        7.arange函数     

        8.linspace函数

        9.logspace函数

        10.zeros函数

        11.eye函数


        前言

        NumPy库是一个开源的Python科学计算库,它提供了高性能的多维数组对象、派生对象(如掩码数组、矩阵)以及用于快速操作数组的各种例程,包括逻辑、形状操作、离散傅立叶变换、基本线性代数、基本统计运算、随机模拟等操作,本系列博客讲重点对NumP库的函数已经操作进行讲解


Python中打开文件操作

        本系列是对NumPy库的讲解,为什么第一小节却是使用Python打开文件?这是因为在数学建模中,数据的提供往往是Excel格式,要对数据进行操作之前,我们得先了解在Python中基本的文件操作:

        1.open函数用于打开文件

                1.Path为文件路径

                2.mode指定模式,默认为r:

模式指令备注
x创建文件,若文件已存在则失败
a写入模式,文件存在则在末尾追加
r读取模式
w写入模式,并线截断文件
b二进制模式
t文本模式
+更新磁盘文件,读写并且读入

                3.buffering为缓冲区(内存的读写速度快于外设,所以大部分情况不用设,即不大于0

                4.encoding为编码方式

filePtr = open(path,mode='r',buffering=-1,encoding='utf-8-sig')
//定义一个文件指针filePtr指向打开的文件

        2.seek函数用于移动文件的读取指针到指定位置。seek函数需要使用文件对象进行调用,无返回值

value = 3
#定义变量value移动光标至3的位置
type.seek(0)
#移动到文件头位置
type.seek(value)
#将文件读取指针移动到文件的第p个字节处,表示绝对位置
type.seek(value, 1)
#在当前位置的基础上,将文件读取指针移动p个字节,表示相对位置
type.seek(value, 2)
#在文件尾的基础上,将文件读取指针移动p个字节,表示相对位置

        3.read函数用于从文件光标位置读取字节:

value_A = type.read(5)
#表示读取五个字符赋值给value_A
value_B = type.read()
#无参数表示读取至文件结束

        4.readline函数用于一次读取文件一行内容,以字符串的形式存储:

value_A = type.readline()
#表示读取文件一行内容
value_B = type.readline()[:-1]
#使用切片可控制读取到的位置,[:-1]代表该行的末尾

        5.readlines函数用于读取文件所有行,以列表的形式存储:

value_A = type.readlines()
#表示读取文件所有行
value_B = type.readlines()[:5]
#使用切片可控制读取到的位置,[:5]代表读取至第五行

        6.split函数用于分割数据:

                1.格式:split('text',value)

                2.以text内容分割内容,分割次数为value

                3.value的默认值为 -1,即分割所有出现次数

                4.列表格式不能使用split函数分割,只能字符串格式才能分割

value_A = type.readline().split(',')
#表示以逗号分割所读取到的行内容
value_B = type.readline().split(',',3)
#表示以逗号分割三次所读取到的行内容

        7.strip函数用于删除两侧字符

                1.格式:strip(value)

                2.当value为空时,代表删除头尾字符(换行,回车,制表符,空格)

                3.不为空则代表删除头尾的value值

value_A = type.strip(',')
#代表删除头尾的逗号字符
value_B = type.strip()
#代表删除头尾的换行,回车,制表符和空格字符

        8.lstrip函数用于删除左侧字符:

                1.格式:lstrip(value)

                2.当value为空时,代表删除开头字符(换行,回车,制表符,空格)

                3.不为空则代表删除开头的value值

value_A = type.lstrip(',')
#代表删除开头的逗号字符
value_B = type.lstrip()
#代表删除开头的换行,回车,制表符和空格字符

        9.rstrip函数用于删除右侧字符:

                1.格式:rstrip(value)

                2.当value为空时,代表删除末尾字符(换行,回车,制表符,空格)

                3.不为空则代表删除末尾的value值

value_A = type.rstrip(',')
#代表删除末尾的逗号字符
value_B = type.rstrip()
#代表删除末尾的换行,回车,制表符和空格字符

初步认识NumPy库

        NumPy库主要的功能之一用来操作数组和矩阵。是科学计算、深度学习等高端领域的必备工具。在使用TensorFlow、Caffe框架训练神经网络模型时,需要进行大量复杂的运算,可以直接调用NumPy里面的API,而且NumPy还包含了很多使用的数学函数,覆盖了很多的数学领域,比如,线性代数、傅里叶变换、随机数生成。在数学建模比赛中,你还可以认为Python + NumPy == Matlab     

图1.动手学NumPy库


使用NumPy库

        使用Numpy库前需要导入Numpy库

import numpy as _numpy    #导入numpy库并取别名为_numpy

NumPy库中的维度

        在介绍NumPy库的操作前,我们需要了解NumPy中的维度。Numpy中维度就是平常所说的一维(只有x轴)、二维(x、y轴)、三维(x、y、z轴)

#一维使用print输出后有一对花括号 [ ]
#二维使用print输出后有两对花括号 [ [] ]
#三维使用print输出后有三对花括号[ [ [] ] ]

array函数

        array函数用于将列表或元组转换为数组

 array(接收对象,dtype = 转换后数据类型,copy = True,order = 'K',subok = False,ndmin = 0)
参数备注
接收对象可为公开数组接口的任何对象,__array__方法返回数组的对象,或任何(嵌套)序列
dtype数组所需的数据类型。如果没有给出,那么类型将被确定为保持序列中的对象所需的最小类型
copy数组所需的数据类型。如果没有给出,那么类型将被确定为保持序列中的对象所需的最小类型
order指定阵列的内存布局。如果接收对象不是数组,则新创建的数组将按C顺序排列(行主要),除非指定了'F',在这种情况下,它将采用Fortran顺序(专业列)。如果object是一个数组,则以下成立。 {'K','A','C','F'},可选
subok如果为True,则子类将被传递,否则返回的数组将被强制为基类数组(默认)
ndmin指定结果数组应具有的最小维数。根据需要,将根据需要预先设置形状
返回值满足要求的数组对象

       表1.array函数参数表

        测试用例:

s1 = [1,2,3,10]
#创建一维列表s1
a1 = _numpy.array(s1,dtype = int)
#将列表s1转换为数组,数据类型为int型
s2 = [[1,2,3,10]]
#创建二维列表s2
a2 = _numpy.array(s2,dtype = int)
#将列表s1转换为数组,数据类型为int型
tp = (2,4,6,9,4)
创建元组tp
a3 = _numpy.array(tp,dtype = float)
#将列表a2转换为数组,数据类型为flosr型
#s1.dtype      s1.size        s1.itemsize   s1.ndim       s1.shape
#查看数组类型   查看元素个数   查看元素大小   查看数组维度   查看数组结构

arange函数     

        arange函数用于生成一维数组

arange([start , ],stop[ , step ,],stype = None)
参数备注
start代表初始值,默认从0开始
stop代表终止值,必填参数
step代表步长,默认为1

表2.arange函数参数表

        测试用例:

_numpy.arange(10)
#array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
_numpy.arange(5,10)
#array([5, 6, 7, 8, 9])
_numpy.arange(5,10,2)
#array([5, 7, 9])
#以上分别省略了初始值和步长


linspace函数

        linspace函数用于生成一个一维数组,其数据是一个等差数列

linspace(start,stop,num = 50,endpoint = True,retstep = False,dtype = None,axis = 0)
参数备注
start代表初始值,必填参数
stop代表终止值,必填参数
num代表生成数据的个数,默认为50
endpoint代表是否包含终止值,默认为True
retstep代表是否显示步长,默认为False
dtype代表数据类型
axis代表轴向,默认为0,代表沿X轴

表3.linspace函数参数表

        测试用例:

_numpy.linspace(10,20,10)
#array([10.        , 11.11111111, 12.22222222, 13.33333333, 14.44444444,15.55555556, 16.66666667, 17.77777778, 18.88888889, 20.        ])_numpy.linspace(10,20,10,endpoint = False)
#array([10., 11., 12., 13., 14., 15., 16., 17., 18., 19.])_numpy.linspace(10,20,10,endpoint = False,retstep = True)
#(array([10., 11., 12., 13., 14., 15., 16., 17., 18., 19.]), 1.0)_numpy.linspace(10,20,10,endpoint = True,retstep = True,dtype = int)
#(array([10, 11, 12, 13, 14, 15, 16, 17, 18, 20]), 1.1111111111111112)
#最后两句代码显示的步长不同,但是数组相同。是因为dtype为int类型,所以小数强转为int类型


logspace函数

        logspace函数用于生成一个一维数组,其数据是一个等比数列

logspace(start,stop,num = 50,endpoint = True,base = 10.0,dtype = None,axis = 0)
参数备注
start代表初始值,必填参数
stop代表终止值,必填参数
num表生成数据的个数,默认为50
endpoint代表是否包含终止值,默认为True
base代表底数,默认为10.0
dtype代表数据类型
axis代表轴向,默认为0,代表沿X轴

表4. logspace函数参数表

_numpy.logspace(10,20,5)
#array([1.00000000e+10, 3.16227766e+12, 1.00000000e+15, 3.16227766e+17,1.00000000e+20])_numpy.logspace(10,20,5,endpoint = False)
#array([1.e+10, 1.e+12, 1.e+14, 1.e+16, 1.e+18])_numpy.logspace(10,20,5,endpoint = False,base= 100.0)
#array([1.e+20, 1.e+24, 1.e+28, 1.e+32, 1.e+36])
#底数为100_numpy.logspace(10,20,5,endpoint = True,base = 10.0,dtype = int,axis = 0)
#array([-2147483648, -2147483648, -2147483648, -2147483648, -2147483648])
#底数为10

zeros函数

        zeros函数用于创建一个元素全为零的数组

zeros(shape,dtype = float,order = 'C')
参数备注
shape代表数组尺寸,可以是数值或元组
dtype代表数组中的元素的数据类型,默认为float
order代表存储多维数组时,是列优先'F'还是行优先'C',默认为行优先
shape代表数组尺寸,故可以使用[]或()分别代表列表或元组的尺寸

表5. zeros函数参数表

_numpy.zeros((2,2))
#array([[0., 0.],[0., 0.]])_numpy.zeros([2,2])
#array([[0., 0.],[0., 0.]])_numpy.zeros((2,2),dtype = int)
#array([[0, 0],[0, 0]])
#与前两个元素类型不同_numpy.zeros((3,5),dtype = int,order = 'F')
#array([[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]])

PS:当shape为[]或()时,可以传入多个数值,如_numpy.zeros((2,2,2)),代表2个3维数组,其元素含有2行2列。总结:当传入的数值大于2时,每增加一个数值代表维度加一,而最终的数字个数由前两个数字综合确定


eye函数

        eye函数用于创建元素中一个对角线全为一的数组矩阵

eye(N,M = None,k = 0,btype = < class 'float' >,order = 'C')
参数备注
N代表行数
M代表列数
k代表对角线元素个数,默认为0
dtype代表数组中元素的数据类型,默认为float
order代表存储多维数组时,是列优先'F'还是行优先'C',默认为行优先

表5. eye函数参数表

_numpy.eye(3,3)
#array([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]])_numpy.eye(3,3,dtype = int)
#array([[1, 0, 0],[0, 1, 0],[0, 0, 1]])_numpy.diag([3,4,5])
#array([[3, 0, 0],[0, 4, 0],[0, 0, 5]])_numpy.diag((3,4,5),1)
array([[0, 3, 0, 0],[0, 0, 4, 0],[0, 0, 0, 5],[0, 0, 0, 0]])_numpy.diag((3,4,5),-1)
#array([[0, 0, 0, 0],[3, 0, 0, 0],[0, 4, 0, 0],[0, 0, 5, 0]])

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

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

相关文章

11-数组与指针深入理解——题型理解

11-数组与指针深入理解——题型理解 文章目录 11-数组与指针深入理解——题型理解一、理解题1二、理解题二三、理解题三四、理解题四五、理解题五六、理解题六 一、理解题1 #include <stdio.h>int main(void) {int (*p)[5] NULL; // 定义一个指向 拥有5个整型数据的数组…

【Java】JDBC+Servlet+JSP实现搜索数据和页面数据呈现

目录 1 .功能介绍 2. 实现流程 3. 项目环境 4. 相关代码 4.1 Maven配置 4.2 SQL语句 4.3 Java代码 4.4 HTML代码 4.5 JSP代码 5. 结果展示 &#xff08;原创文章&#xff0c;转载请注明出处&#xff09; 博主是计算机专业大学生&#xff0c;不定期更新原创优质文章&…

Android 常用开源库 MMKV 源码分析与理解

文章目录 前言一、MMKV简介1.mmap2.protobuf 二、MMKV 源码详解1.MMKV初始化2.MMKV对象获取3.文件摘要的映射4.loadFromFile 从文件加载数据5.数据写入6.内存重整7.数据读取8.数据删除9.文件回写10.Protobuf 实现1.序列化2.反序列化 12.文件锁1.加锁2.解锁 13.状态同步 总结参考…

gitlabcicd-k8s部署runner

一.环境信息 存储使用nfs挂载持久化 k8s环境 helm安装 建议helm 3 二.部署gitlab-runner 1.查看gitlab版本 进入容器可通过执行&#xff1a;gitlab-rake gitlab:env:info rootgitlab-647f4bd8b4-qz2j9:/# gitlab-rake gitlab:env:info System information System: Current Us…

【面试干货】 Hash 索引和 B+树索引的区别

【面试干货】 Hash 索引和 B树索引的区别 1、Hash 索引2、B 树索引3、区别和适用场景 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在数据库中&#xff0c;索引是一种重要的数据结构&#xff0c;用于加速查询操作。常见的索引包括 Hash 索…

蓝桥杯--跑步计划

问题描述 小蓝计划在某天的日期中出现 11 时跑 55 千米&#xff0c;否则只跑 11 千米。注意日期中出现 11 不仅指年月日也指星期。 请问按照小蓝的计划&#xff0c;20232023 年小蓝总共会跑步锻炼多少千米?例如&#xff0c;55 月 11 日、11 月 1313 日、1111 月 55 日、44 月…

从零开始实现自己的串口调试助手(10) - 优化 收尾 + 打包

光标位置优化 在接收槽函数中更新光标位置: // 让光标始终在结尾 ui->textEditRev->moveCursor(QTextCursor::End); ui->textEditRev->ensureCursorVisible(); // 让光标可视化 //记得HEX显示槽函数底下也得加上这两行代码 新的接收槽函数如下: void Wid…

一维信号循环平移小波降噪方法(MATLAB R2021b)

循环平移算法由Coifman和Donoho最先提出&#xff0c;其基本原理是将信号进行循环平移&#xff0c;将平移后的信号降噪后再做逆循环平移&#xff0c;改变平移位数&#xff0c;多次重复上述运算&#xff0c;将获得的所有结果求平均&#xff0c;得到最后的结果。 在理想情况下&am…

Java面试八股之什么是自动装箱和自动拆箱

什么是自动装箱和自动拆箱 在Java中&#xff0c;自动装箱&#xff08;Autoboxing&#xff09;和自动拆箱&#xff08;Auto-unboxing&#xff09;是两个与基本数据类型和它们对应的包装类之间的转换相关的特性。这两个概念自Java 5&#xff08;也称为Java SE 5或JDK 5&#xff…

【CS.CN】深入探讨下HTTP的Connection头:通过keep-alive实现高效网络连接

文章目录 0 序言0.1 由来0.2 使用场景0.3 现在还需要吗&#xff1f; 1 Connection: keep-alive的机制2 语法 && 通过设置Connection: keep-alive优化性能3 验证与性能提升4 总结References 0 序言 0.1 由来 Connection头部字段在HTTP/1.1中被引入&#xff0c;主要用于…

老旧机子装linux——Xubuntu

目录 前言 正文 下载系统 ​编辑 制作系统盘&#xff1a; 安装界面 Xubuntu ​编辑 lubuntu 后语 前言 有两台电脑&#xff0c;一台装了Ubuntu22&#xff0c;一台装了debuntu。虽然debuntu界面与乌班图大体一样&#xff0c;但是编译器好像有点区别。由于机子为10年前的老…

React的useState的基础使用

import {useState} from react // 1.调用useState添加状态变量 // count 是新增的状态变量 // setCount 修改状态变量的方法 // 2.添加点击事件回调 // userState实现计数实例import {useState} from react// 使用组件 function App() {// 1.调用useState添加状态变量// coun…

2024年AI大模型训练数据白皮书作用

2024年AI大模型训练数据白皮书 在人工智能迅猛发展的今天&#xff0c;AI大模型的训练数据质量和管理成为影响其性能和应用效果的关键因素。《2024年AI大模型训练数据白皮书》为业内人士提供了一份详尽的指南&#xff0c;揭示了当前AI大模型训练数据的最新趋势、最佳实践以及未…

Go微服务: 基于rocketmq:server和rocketmq:broker搭建RocketMQ环境,以及生产消息和延迟消费消息的实现

RocketMQ 的搭建 1 ) 配置 docker-compose.yaml 文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876volumes:- ./logs:/opt/logs- ./store:/opt/storenetworks:rmq:aliases:- rmqnamesrvrmqbroker:image: fo…

[HGAME 2023 week4]shellcode

看题目&#xff0c;将base64解密&#xff0c;然后dump下来&#xff0c;再拉进ida里&#xff0c;发现为tea加密 在tea加密中得到key 密文就是另外的一个文件 exp import re from ctypes import *import libnumdef decrypt(v, k):v0, v1 c_uint32(v[0]), c_uint32(v[1])delta…

【设计模式】行为型设计模式之 策略模式学习实践

介绍 策略模式&#xff08;Strategy&#xff09;&#xff0c;就是⼀个问题有多种解决⽅案&#xff0c;选择其中的⼀种使⽤&#xff0c;这种情况下我们 使⽤策略模式来实现灵活地选择&#xff0c;也能够⽅便地增加新的解决⽅案。⽐如做数学题&#xff0c;⼀个问题的 解法可能有…

如何拼接全景图?PTGui Pro macOS安装包

PTGui Pro是一款功能强大的全景图像拼接软件&#xff0c;特别适合专业摄影师和设计师使用。它能够将多张照片拼接成高质量的全景图&#xff0c;支持普通、圆柱和球形等多种全景模式。软件提供了自动图像拼接和手动模式&#xff0c;用户可根据需求灵活选择。同时&#xff0c;PTG…

在家AIAA(美国航空航天学会)文献如何查找下载

今天有位同学的求助文献来自AIAA&#xff08;美国航空航天学会&#xff09;&#xff0c;下面就讲一下不用求助他人自己就可搞定文献下载的途径并实例操作演示。 首先我们先对AIAA&#xff08;美国航空航天学会&#xff09;数据库做个简单的了解&#xff1a; 美国航空航天学会…

使用汇编和proteus实现仿真数码管显示电路

proteus介绍&#xff1a; proteus是一个十分便捷的用于电路仿真的软件&#xff0c;可以用于实现电路的设计、仿真、调试等。并且可以在对应的代码编辑区域&#xff0c;使用代码实现电路功能的仿真。 汇编语言介绍&#xff1a; 百度百科介绍如下&#xff1a; 汇编语言是培养…

Windows UAC权限详解以及因为权限不对等引发的若干问题排查

目录 1、什么是UAC&#xff1f; 2、微软为什么要设计UAC&#xff1f; 3、标准用户权限与管理员权限 4、程序到底以哪种权限运行&#xff1f;与哪些因素有关&#xff1f; 4.1、给程序设置以管理员权限运行的属性 4.2、当前登录用户的类型 5、案例1 - 无法在企业微信聊天框…