当前位置: 首页 > news >正文

numpy学习笔记(1),不定期更新

在对numpy进行了几个小时的学习后,做出如下学习笔记

1. numpy类型入门

写完这边笔记后,过了几天补充一些理解:

  1. numpy处理的主要内容是数组,一维的,二维的,三维的,多维的。
  2. numpy的数组与python原生的数组在概念上基本类似,
  3. 但是在函数,方法上有很大区别。很多numpy数组的api,放到python原生数组上是不可用的。

import numpy库后,通过numpy参数操作示例

import numpy as np# 创建ndarray,通过list创建
a = np.array([1, 2, 3])
print(a)
[1 2 3]
# 通过元组创建ndarray,并指定数据类型为float (此处是python的float类型,不是numpy的float类型)
b = np.array((2, 3, 4), dtype=float)
print("值", b, ", 类型", b.dtype)
值 [2. 3. 4.] , 类型 float64
# 创建复数类型
c = np.array([1+2j, 3+4j, 5+6j])
print("value:", c, ", type:", c.dtype)
value: [1.+2.j 3.+4.j 5.+6.j] , type: complex128
d = np.array(["你好", "hello", "world"])
print("value:", d, ", type:", d.dtype)
value: ['你好' 'hello' 'world'] , type: <U5
f = np.array([b"hello", b'world'])
print("value:", f, ", type:", f.dtype)
value: [b'hello' b'world'] , type: |S5

数据类型分为python的类型,与numpy的类型
比如:int_, intc, int8, int16, float16…等等。是numpy的数据类型,在使用是需要有numpy前缀

type01 = np.array([1, 2, 3], dtype = np.int8)
type01
array([1, 2, 3], dtype=int8)

小端与大端:存储时数据头尾与内存前后的关系相反

dt = np.dtype('<u4') # uint32位,小端存储
g = np.array([1, 2, 3], dtype = dt)
print(g, g.dtype)
[1 2 3] uint32

通过astype()可以转换array元素的数据类型,如果转换类型不兼容会报错

h = np.array(["1", "2.3", "4.5"])
ht = h.astype("f4") # f4: float32
ht
array([1. , 2.3, 4.5], dtype=float32)

3. numpy中的几种数组函数

numpy中数组的3个基础函数

  1. arange 数列
  2. linspace 线性等分向量,等差数列
  3. logspace 对数等分向量,等比数列

一些基础概念:

  • 标量:0维数组
  • 向量(矢量):一维数组
  • 矩阵:二维数组
  • 张量:三维以上数组

3.3.1 使用arange函数

arange函数创建数值范围并返回数组对象,与python中range函数类似。语法格式如下:

numpy.arange([start,] stop, [step,] dtype=None)
  • start:开始值,可以省略,默认为0, 开始值包含在数组里
  • stop:结束值,不包含在数组里
  • step:步长,默认值为1,步长可以是负数,表示递减
  • dtype:数组元素类型
a = np.arange(10)
a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a = np.arange(1, 10, 2)
a
array([1, 3, 5, 7, 9])
a = np.arange(1, -10, -3, dtype=np.float32)
a
array([ 1., -2., -5., -8.], dtype=float32)

3.3.2 等差数列与linspace函数

linsapce函数创建等差数列,语法格式如下:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
  • start:开始值,包含
  • stop:结束值,默认包含,通过endpoint可以调整是否包含
  • num:生成元素个数
  • endpoint:是否包含stop
  • retstep:是否返回步长(公差),False不返回,True返回。设置为True时,函数返回值是二元数组(数组,步长)
a = np.linspace(0, 10, 10)
a
array([ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ])
a = np.linspace(0, 10, 10, retstep=True)
a
(array([ 0.        ,  1.11111111,  2.22222222,  3.33333333,  4.44444444,5.55555556,  6.66666667,  7.77777778,  8.88888889, 10.        ]),1.1111111111111112)

当retstep=True时,函数返回内容为二元数组,第一个元素是等差数列,第二个元素是步长

a[1]
1.1111111111111112

3.3.3 等比数列与logspace函数

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
  • start:开始值,base ** start,base的start次幂
  • stop:结束值,base ** stop, base的stop次幂
  • base:底数,默认以10为底
  • num:生成元素个数
  • endpoint:是否包含stop
a = np.logspace(0, 9, 10)
a
array([1.e+00, 1.e+01, 1.e+02, 1.e+03, 1.e+04, 1.e+05, 1.e+06, 1.e+07,1.e+08, 1.e+09])

1e+1:1乘以10的1次方
ne+x: n乘以10的x次方

a = np.logspace(0, 9, 10, base=2)
a
array([  1.,   2.,   4.,   8.,  16.,  32.,  64., 128., 256., 512.])

3.3.4 练习

  1. 从给定数组里获取奇数
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
arr2 = arr[arr % 2 == 1]
arr2
array([1, 3, 5])
  1. 创建介于2.5到6.5之间的30个均匀间隔元素的一维数组,包括6.5
arr = np.linspace(2.5, 6.5, num=30, endpoint=True, retstep=True)
arr
(array([2.5       , 2.63793103, 2.77586207, 2.9137931 , 3.05172414,3.18965517, 3.32758621, 3.46551724, 3.60344828, 3.74137931,3.87931034, 4.01724138, 4.15517241, 4.29310345, 4.43103448,4.56896552, 4.70689655, 4.84482759, 4.98275862, 5.12068966,5.25862069, 5.39655172, 5.53448276, 5.67241379, 5.81034483,5.94827586, 6.0862069 , 6.22413793, 6.36206897, 6.5       ]),0.13793103448275862)

4. 二维数组

4.1 创建二位数组

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
a
array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])

4.2 重新设置维度

shape属性可以返回数组的形状,简单理解为:几乘几

a.shape
(3, 3)
数组对象的reshape方法可以修改数组形状
a = np.arange(0, 10)
print("a:", a)
# 将一维数组设置成2行5列的二维数组
a = a.reshape(2, 5)
print("a reshape:", a)b = np.arange(0, 27)
print("b:", b)
# 将一维数组b reshape成3*3*3的三维数组
b = b.reshape(3, 3, 3)
print("b reshape:", b)
a: [0 1 2 3 4 5 6 7 8 9]
a reshape: [[0 1 2 3 4][5 6 7 8 9]]
b: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 2324 25 26]
b reshape: [[[ 0  1  2][ 3  4  5][ 6  7  8]][[ 9 10 11][12 13 14][15 16 17]][[18 19 20][21 22 23][24 25 26]]]

4.3 更多创建二维数组的方式

  • ones:创建元素都是1的数组
  • zeros:创建元素都是0的数组
  • empty
  • full
  • eye , identity
4.3.1 ones函数根据指定的形状和数据类型生成全为1的数组,语法如下:
numpy.ones(shape, dtype=None)

dtype不指定时,float

a = np.ones((2, 3))
a
array([[1., 1., 1.],[1., 1., 1.]])
a = np.ones((2, 3), dtype=np.int32)
a
array([[1, 1, 1],[1, 1, 1]])
4.3.2 zeros函数,与ones用法类似,区别在于元素值是0
4.3.2 empty函数,与ones用法类似,区别在于元素值是未初始化的

未初始化:内存里保存的是原始值,可能是空,也可能是上一次操作后保留在内存里的值

e = np.empty((2, 3))
e
array([[0., 0., 0.],[0., 0., 0.]])
e = np.empty((3, 7))
e
array([[6.23042070e-307, 4.67296746e-307, 1.69121096e-306,1.29061414e-306, 8.34441742e-308, 8.90104239e-307,1.33511290e-306],[1.42417221e-306, 1.60220393e-306, 1.02359848e-306,3.11525958e-307, 1.69118108e-306, 8.06632139e-308,1.20160711e-306],[1.69119330e-306, 1.29062229e-306, 6.89804133e-307,1.11261162e-306, 8.34443015e-308, 1.42404727e-306,3.39986383e-317]])
上面e = np.empty((3, 7))执行后,e的内容不是0,而是上次内存操作后留下的值
3.3.4 full函数

full函数根据指定的形状和数据类型生成数组,并用指定的数据填充,语法格式如下:

numpy.full(shape, fill_value, dtype=None)
# 创建2行4列,元素value都是10的二维数组
a = np.full((2, 4), 10)
a
array([[10, 10, 10, 10],[10, 10, 10, 10]])
# 创建5个元素的一维数组,每个元素value都是3
a = np.full(5, 3, dtype=np.float32)
a
array([3., 3., 3., 3., 3.], dtype=float32)
4.3.5 identity和eye函数
  1. identity函数用来创建单位矩阵,即:对角线元素为1,其他元素为0的正方形矩阵。
    语法格式如下:
numpy.identity(n, dtype=None)
  1. eye函数用来创建二维数组,对角线元素为1,其他元素为0,
    语法格式如下
numpy.eye(N, M=None, k=0, dtype=float)
  • N:行数
  • M:列数,如果省略,则M=N
  • k:对角线开始位置的索引,默认是0,主对角线。
  • dtype:元素数据类型,默认是float
i = np.identity(3)
i
array([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]])
e = np.eye(3, 4, 0, dtype=np.int32)
e
array([[1, 0, 0, 0],[0, 1, 0, 0],[0, 0, 1, 0]])
4.3.6 二维数组的轴

简单来说,二维数组的行:0轴,二维数组的列:1轴

x = np.array([['a', 'b', 'c', 'd', 'e'], ['h', 'i', 'j', 'k', 'l'], ['o', 'p', 'q', 'r', 's']])
x
array([['a', 'b', 'c', 'd', 'e'],['h', 'i', 'j', 'k', 'l'],['o', 'p', 'q', 'r', 's']], dtype='<U1')
# 通过轴获取二维数组中对应的元素:
x[2, 3]
# 其实就是几行几列
'r'

4.6 数组转置

数组的T属性可以转置数组,将数组轴的索引倒置。说人话就是行专列,列转行

  • 一维数组转置无意义,转置无效果
  • 形状为(n, m),转置后形状为(m, n)
  • 数组形状为(a0, a1, …, an-1, an),转置后形状为(an, an-1, …, a1, a0)
t1 = np.array([[1, 2, 3], [4, 5, 6]])
t1
array([[1, 2, 3],[4, 5, 6]])
# 使用T属性转置多维数组
t1.T
array([[1, 4],[2, 5],[3, 6]])

相关文章:

numpy学习笔记(1),不定期更新

在对numpy进行了几个小时的学习后&#xff0c;做出如下学习笔记 1. numpy类型入门 写完这边笔记后&#xff0c;过了几天补充一些理解&#xff1a; numpy处理的主要内容是数组&#xff0c;一维的&#xff0c;二维的&#xff0c;三维的&#xff0c;多维的。numpy的数组与python原…...

如何使用静态IP代理解决Facebook多账号注册并进行网络推广业务?

在当今的数字时代&#xff0c;社交媒体成为了企业进行网络推广的一个重要途径&#xff0c;其中&#xff0c;Facebook是最受欢迎的社交媒体之一&#xff0c;因为它可以让企业通过创建广告和页面来推广他们的产品或服务。 但是&#xff0c;使用Facebook进行网络推广时&#xff0…...

局部适配器在产品和二次开发中的应用

局部适配器这个说法是本人从产品项目中总结出的一种叫法。原理是在产品项目的某一项业务处理时&#xff0c;嵌入抽象方法和默认实现&#xff0c;以便产品作二次开发时&#xff0c;不用迁分支或重写就适配修改产品工程的局部逻辑。该方法使用原理很简单&#xff0c;但好处明显&a…...

C++之类和对象(上)

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1访问限定符 4.2 类的两种定义方式 第一种&#xff1a; 第二种&#xff1a; 4.3封装 5.类的实例化 6.类对象模型 1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;…...

Linux 测试磁盘读写速度

1、先熟悉两个特殊的设备&#xff1a; &#xff08;1&#xff09;/dev/null&#xff1a;回收站、无底洞。 &#xff08;2&#xff09;/dev/zero&#xff1a;产生字符。 2、测试磁盘写能力 time dd if/dev/zero of/testw.dbf bs4k count100000 因为/dev//zero是一个伪设备…...

【YOLOv8】Yolov5和Yolov8网络结构的分析与对比

目录 一 YOLOv5 二 YOLOv8 yolo通常采用backbone-neck-head的网络结构。 Backbone 主要负责从输入图像中提取高层次的语义特征,常包含多个卷积层和池化层&#xff0c;构建了一个深层次的特征提取器。Neck通常用来进一步整合与调整backbone提取的特征&#xff0c;有利于将不同…...

无人机低空数字摄影测量系统

一、 系统概述 系统完全基于IDL设计实现&#xff0c;包括界面布局到人机交互再到底层核心函数功能。整体设计框架基于数字摄影测量的专业处理流程&#xff0c;实现了数据输入、数据预处理、影像信息检测、空间定向、地形三维建模、专题信息提取、成果输出与更新等功能。同时为…...

Disk Drill Enterprise for Mac v5.5.1515数据恢复软件中文版

Disk Drill 是 Mac 操作系统固有的Mac数据恢复软件&#xff1a;使用 Recovery Vault 轻松保护文件免遭意外删除&#xff0c;并从 Mac 磁盘恢复丢失的数据。支持大多数存储设备&#xff0c;文件类型和文件系统。 软件下载&#xff1a;Disk Drill Enterprise for Mac v5.5.1515激…...

day55 最长递增子序列 最长连续递增子序列 最长重复子数组

题目1 300 最长递增子序列 题目链接 300 最长递增子序列 题意 找到整数数组nums的最长严格递增子序列的长度&#xff08;子序列并不改变原始的顺序&#xff0c;但是可以删除元素&#xff09; 动态规划 动规五部曲 1&#xff09;dp数组及下标i的含义 dp[i] 表示以nums[i…...

使用Springboot配置生产者、消费者RabbitMQ?

生产者服务 1、引入依赖以及配置rabbitmq 此时我们通过使用springboot来快速搭建一个生产者服务 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> applica…...

代码随想录算法训练营第46天|139.单词拆分、多重背包问题

139.单词拆分 题目链接&#xff1a;单词拆分 题目描述&#xff1a;给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 **注意&#xff1a;**不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词…...

数组与伪数组的区别

大家都知道&#xff0c;在js中使用 document.querySelectorAll(选择器&#xff09;获取到的为该选择器能选择到的所有元素组成的伪数组&#xff0c;所谓伪数组&#xff0c;就是外表和数组一样&#xff0c;能够使用索引遍历&#xff0c;但本质是对象。 数组与伪数组之间的区别&…...

Java集合List

List特有方法 经典多态写法 // 经典的多态写法 List<String> list new ArrayList<>();常用API&#xff1a;增删改查 // 添加元素 list.add("Java"); // 添加元素到指定位置 list.add(0, "Python");// 获取元素 String s list.get(0);// 修改…...

elasticsearch基础命令

1 字段分词分析: GET /store_info_data/_analyze {"field": "storeName","text":"20pilapala0" }2 精确查找,去除评分 GET /store_info_data/_search {"query": {"constant_score": {"filter": {&quo…...

Capture One 23 Enterprise for Mac中文版 全面的图像处理工具

Capture One 23 Enterprise for Mac中文版一款专业的图像编辑和管理软件&#xff0c;具备强大的功能和工具&#xff0c;适用于摄影师、摄影工作室和专业用户。 软件下载&#xff1a;Capture One 23 Enterprise for Mac中文版下载 该软件为用户提供了全面的图像处理工具&#xf…...

Qt案例 通过调用Setupapi.h库实现对设备管理器中设备默认驱动的备份

参考腾讯电脑管家-软件市场中的驱动备份专家写的一个驱动备份软件案例&#xff0c;学习Setupapi.h库中的函数使用.通过Setupapi.h库读取设备管理器中安装的设备获取安装的驱动列表&#xff0c;通过bit7z库备份驱动目录下的所有文件. 目录导读 实现效果相关内容示例获取SP_DRVIN…...

如何理解JVM

JVM&#xff08;Java虚拟机&#xff09;是Java程序的运行环境&#xff0c;它是Java技术的核心组成部分之一。理解JVM涉及到以下几个方面的内容&#xff1a; 1. **虚拟机概念**&#xff1a;虚拟机是一种软件实体&#xff0c;它在物理计算机上模拟出一个计算机系统&#xff0c;使…...

第十四讲:C语言字符函数和字符串函数

目录 1. 字符分类函数 2、字符转换函数 3. strlen的使⽤和模拟实现 4. strcpy 的使⽤和模拟实现 5. strcat 的使⽤和模拟实现 6. strcmp 的使⽤和模拟实现 7. strncpy 函数的使⽤ 8. strncat 函数的使⽤ 9. strncmp函数的使⽤ 10. strstr 的使⽤和模拟实现 11. strt…...

华为海思2024春招数字芯片岗机试题(共9套)

huawei海思2024春招数字芯片岗机试题(共9套&#xff0c;有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;WX:didadidadidida313&#xff0c;加我备注&#xff1a;CSDN huawei数字题目&#xff0c;谢绝白嫖哈&#xff09…...

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测 目录 分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析和改进蜣螂优化算法优化最小二乘支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...