NumPy库学习笔记(未完)

2023-11-06

NumPy库

这篇文章主要内容来源于Python、Numpy 教程 | NumPy 中文python常用库 - NumPy 和 sklearn入门 - ML小菜鸟 - 博客园 (cnblogs.com)

1.1 导入NumPy库

import numpy as np

1.2 numpy.array 与 list的关系与区别

a = [1,2,3,4,5,6] # python内置数组结构
b = np.array(a) # numpy数组结构

list特点:

  • list中保存的元素可以是不同类型的,可以是str,整型等等
  • list数组中的每个元素的存储都需要1个指针和1个数据
  • list实际保存的是数据的“存放地址”,这会带来额外的内存消耗

当想要减少内存的消耗的情况下,可以将list替换成np.array,这样可以节约很多空间,而且Numpy数组是执行更快数值计算的优秀容器。

1.3 NumPy的常用操作

常用操作

# 以下为创建一维数组的基本方法
a = np.array([0, 1, 2, 3, 4])
b = np.array((0, 1, 2, 3, 4))
c = np.arange(5)
d = np.linspace(0, 2*np.pi, 5)

# 输出结果
print(a) # >>>[0 1 2 3 4]
print(b) # >>>[0 1 2 3 4]
print(c) # >>>[0 1 2 3 4]
print(d) # >>>[ 0.          1.57079633  3.14159265  4.71238898  6.28318531]
print(a[3]) # >>>3

上面的代码显示了创建数组的4种不同方法。最基本的方法是将序列传递给NumPy的array()函数; 你可以传递任何序列(类数组),而不仅仅是常见的列表(list)数据类型。

当print具有不同长度数字的数组时,会自动补齐(如d),这能便于查看矩阵。

对数组的索引和list的操作类似(如a[3])

创建一个二维数组

# 二位数组创建
a = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28 ,29, 30],
              [31, 32, 33, 34, 35]])
 
print(a[2,4]) # >>>25

如上示代码,创建一个二维数组的时候,我们可传递一个“列表的列表”给array()函数。以此类推,一个三维数组的创建就需要给array()函数传递一个“列表的列表的列表”,更高维的以此类推。

当我们想要索引一个二维数组时,我们需要给定所需的行和列的索引(如a[2,4])

多维数组切片

a = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28 ,29, 30],
              [31, 32, 33, 34, 35]])

print(a[0, 1:4]) # >>>[12 13 14]
print(a[1:4, 0]) # >>>[16 21 26]
print(a[::2,::2]) # >>>[[11 13 15]
                  #     [21 23 25]
                  #     [31 33 35]]
print(a[:, 1]) # >>>[12 17 22 27 32]

通过对每个以逗号分隔的维度执行单独的切片,可以对多维数组进行切片。因此,对于二维数组,第一片定义了行的切片,第二片定义了列的切片。

图来自NumPy中文网

图来自NumPy中文网

数组属性

在使用 NumPy 时,你会想知道数组的某些信息。很幸运,在这个包里边包含了很多便捷的方法,可以给你想要的信息。

# 查看数组属性

a = np.array([[11, 12, 13, 14, 15],
              [16, 17, 18, 19, 20],
              [21, 22, 23, 24, 25],
              [26, 27, 28 ,29, 30],
              [31, 32, 33, 34, 35]])

print(type(a)) # >>><class 'numpy.ndarray'>
print(a.dtype) # >>>int64
print(a.size) # >>>25
print(a.shape) # >>>(5, 5)
print(a.itemsize) # >>>8
print(a.ndim) # >>>2
print(a.nbytes) # >>>200

a的类型实际上为’ndarray’

数组的形状是它有多少行和列,上面的数组有5行和5列,所以它的形状是(5,5)。

itemsize属性是每个项占用的字节数。这个数组的数据类型是int 64,一个int 64中有64位,一个字节中有8位,除以64除以8,你就可以得到它占用了多少字节,在本例中是8。

ndim 属性是数组的维数。这个有2个。例如,向量只有1。

nbytes 属性是数组中的所有数据消耗掉的字节数。你应该注意到,这并不计算数组的开销,因此数组占用的实际空间将稍微大一点。

使用数组

基本操作符

# 基本操作符
a = np.arange(25)
a = a.reshape((5, 5))

b = np.array([10, 62, 1, 14, 2, 56, 79, 2, 1, 45,
              4, 92, 5, 55, 63, 43, 35, 6, 53, 24,
              56, 3, 56, 44, 78])
b = b.reshape((5,5))

print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a ** 2)
print(a < b)
print(a > b)

print(a.dot(b))

当我们对两个array进行运算的时候,实际上是对每个元素进行了运算。如(a + b)实际上就是将a,素组中的每一个元素分别进行相加,结果同样输出为一个数组。

注意,当进行逻辑运算(< >)时,返回的是一个布尔型数组:

print(a < b)

[[ True  True False  True False]
 [ True  True False False  True]
 [False  True False  True  True]
 [ True  True False  True  True]
 [ True False  True  True  True]]

dot() 函数计算两个数组的点积。它返回的是一个标量(只有大小没有方向的一个值)而不是数组。

(还没弄懂QAQ)

数组特殊运算符

# dot, sum, min, max, cumsum
a = np.arange(10)

print(a.sum()) # >>>45
print(a.min()) # >>>0
print(a.max()) # >>>9
print(a.cumsum()) # >>>[ 0  1  3  6 10 15 21 28 36 45]

sum()min()max()函数的作用非常明显。将所有元素相加,找出最小和最大元素。

cumsum()函数首先将第一个元素和第二个元素相加,并将其存储在一个列表中,然后将该结果添加到第三个元素中,全部执行完毕后返回相加后的列表(也许前缀和有用?)

索引进阶

花式索引

# 花式索引
a = np.arange(0, 100, 10)
indices = [1, 5, -1]
b = a[indices]
print(a) # >>>[ 0 10 20 30 40 50 60 70 80 90]
print(b) # >>>[10 50 90]

可以使用 一个数组对另一个数组进行索引

布尔屏蔽

# 布尔屏蔽
import matplotlib.pyplot as plt

a = np.linspace(0, 2 * np.pi, 50)
b = np.sin(a)
plt.plot(a,b)
mask = b >= 0
plt.plot(a[mask], b[mask], 'bo')
mask = (b >= 0) & (a <= np.pi / 2)
plt.plot(a[mask], b[mask], 'go')
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NumPy库学习笔记(未完) 的相关文章

随机推荐

  • windows安装pnpm后报错:pnpm : 无法将“pnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

    使用 npm 方式 安装pnpm 命令如下 npm install g pnpm 安装完以后 执行pnpm v 查看版本号 pnpm v 执行完 发现报错 pnpm 无法将 pnpm 项识别为 cmdlet 函数 脚本文件或可运行程序的名称
  • 服务器被攻击了怎么办

    今天德迅云安全的我给大家讲讲服务器被攻击的那些事 首页给大家讲讲我一客户的亲身经历 我有个客户开设了电商平台 最近几年电商平台俨然已经成了老百姓的生活依赖 淘宝 京东 所以我这客户的小平台发展得也还不错 直到之前那段时间日子他遇上了大麻烦
  • 61 openEuler 22.03-LTS 搭建MySQL数据库服务器-管理数据库用户

    文章目录 61 openEuler 22 03 LTS 搭建MySQL数据库服务器 管理数据库用户 61 1 创建用户 示例 61 2 查看用户 示例 61 3 修改用户 61 3 1 修改用户名 61 3 2 修改用户示例 61 3 3
  • Java虚拟机的类加载机制

    Java虚拟机的类加载机制 Java虚拟机在程序执行过程中会动态加载类 所谓类的加载指的是将一个Class文件描述的Class对象加载到JVM中 形成一个Class对象的过程 这里 Class对象 更通用的指的是一个二进制字节流 并不一定以
  • C语言——程序运行时数据结构

    运行时的数据结构 段 目标文件和可执行文件有几种不同格式 在大多数Svr4实现中采用一种叫做ELF 原意位 可扩展链接器格式 现在代表 可执行文件和链接格式 其他系统中可执行文件格式是COFF 普通目标文件格式 所有不同格式具有一个共同概念
  • No input file specified 记一次令人绝望的后端环境部署问题

    背景 从别人那接手一个项目 基于laravel的 开发环境用的是LNMP 现在要将这个项目部署到自己的服务器 使用LNMP一键安装包 在服务器配置lnmp环境 然后将接手的项目解压到目录 home wwwroot 配置nginx的serve
  • HBase Windows 安装

    一 写在前面 在安装HBase之前 我们需要先安装JDK和Hadoop 具体JDK和Hadoop的安装我前面已经做过了 需要的话 请看我的另一篇博客 Hadoop Windows 安装 还是那句话 在安装HBase之前 我们需要搞清楚HBa
  • strongswan编译、配置

    strongswan编译 下载strongswan源码后 在命令行执行 configure h 会打印出来编译时的配置选项 比较重要有 prefix PREFIX PREFIX为编译完成后的可执行文件 库文件以及配置文件等的安装目录 运行目
  • mBed Pelion学习笔记(三) Updating device firmware

    一 Device Management Update client 本节介绍如何通过Device Management Update client 来接收更新 为了设置设备上的客户端 我们需要准备好 固件镜像 和 引导程序 同时还需要一个独
  • Java 多线程 --- 线程同步 volatile关键字

    Java 多线程 线程同步 volatile关键字 volatile keyword 使用volatile保证可见性 使用volatile禁止指令重排 volatile keyword Volatile是Java虚拟机提供的轻量级的同步机制
  • 【unity记录】导入标准资源包(Standard Assets)

    想导入一些后期效果试试看 按书上的步骤行不通了 书已经是几年前的了 旧版本的方式是 Assets gt Import Package gt Effects 新版本以后只有Custom Package了 所以只能从AssetsStore下载标
  • Linux中_使用 df_du_命令_查看磁盘空间文件大小

    文章目录 Linux 查看磁盘空间 Linux 查看磁盘空间可以使用 df 和 du 命令 1 df 2 du 3 其他一些可以查看详细linux系统信息的命令和方法 Linux 查看磁盘空间 Linux 查看磁盘空间可以使用 df 和 d
  • 经验模态分解法简析 (转)

    http blog sina com cn s blog 55954cfb0102e9y2 html 美国工程院士黄锷博士于1998年提出的一种信号分析方法 重点是黄博士的具有创新性的经验模态分解 Empirical Mode Decomp
  • sql语句练习50题(Mysql版)

    表名和字段 1 学生表 Student s id s name s birth s sex 学生编号 学生姓名 出生年月 学生性别 2 课程表 Course c id c name t id 课程编号 课程名称 教师编号 3 教师表 Tea
  • 使用Python制作疫情数据分析可视化图表(三)

    python小白 在 一心学 公众号学习了一点疫情数据分析可视化的课程 记录下来 供小白参考 目录 一 基本数据的查看和初步处理 二 时间序列与区域划分 三 快速查看不同省市疫情现状 四 累计确诊病例走势 五 不同省市确诊新增情况 六 全国
  • 如何启动docker服务

    Docker Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中 然后发布到任何流行的 Linux或Windows操作系统的机器上 也可以实现虚拟化 容器是完全使用沙箱机制 相互之间不会有任何接
  • imagenet val 按类别分类

    前言 有时候想看imagenet下某个类别的效果 但它又没划分 之前看了这篇文章将ImageNet的验证集val数据分类到不同文件夹中 但不是很清楚那代码 本文基于它的代码去做更改 把这个下下来 https raw githubuserco
  • React Native_手把手教你做项目(二.视频列表页布局&Mock虚拟数据)

    我们继续在上一篇文章的基础上编写我们的应用程序 视频列表页List 我们先写垃圾代码 把整个的架子搭起来 然后如果有其他页面通用的组件的话 我们再进行封装处理 ListView布局 list js文件 import React Compon
  • 内部类、枚举、Object类

    内部类 定义在一个类的内部的类 作用 1 内部类和外部类可以互相访问其成员 2 通过内部类 可以实现多继承 3 缺点 结构复杂 代码可读性不强 分类 成员内部类 1 不能有static属性和方法 原理同局部变量不能用static修饰 但是s
  • NumPy库学习笔记(未完)

    NumPy库 这篇文章主要内容来源于Python Numpy 教程 NumPy 中文和python常用库 NumPy 和 sklearn入门 ML小菜鸟 博客园 cnblogs com 1 1 导入NumPy库 import numpy a