Python每日一库之Numpy(python numpy.zeros)
off999 2024-10-04 18:49 27 浏览 0 评论
什么是Numpy?
Numpy 用于在数组中执行数学和逻辑运算。使用 NumPy 的主要目的是提高内存效率,它可以管理任何维度的大量数据。Numpy 用于执行数组和矩阵运算。
Numpy 可以执行矩阵运算、三角函数、线性代数、统计等等。
Numpy ndarray 提供多维数组对象。
Numpy中的数组有哪些类型?
标量 - 它只有单个元素0D。
向量 - 它有 n 个元素,但是,元素应该是行或列(简单地总结元素列表)1D。
矩阵 - 矩阵在2D行和列中保存值
Tensor-Tensor 有 n 维的行和列元素。
如何安装Numpy
使用 pip 安装 NumPy 包
pip install numpy
Pandas 和 Numpy 相辅相成,是两个最重要的 Python 库,如果你想了解Pandas,请查看我之前的Pandas文章:Python每日一库之Pandas
最重要的 Numpy 数据类型是什么?
- 一维数组
最重要的对象之一是称为 ndarray 的 N 维数组类型。
我们可以将一维数组视为具有一个或多个元素的表的一列或一行:
存储在 ndarray 中的所有项目都必须是同一类型。这意味着 ndarray 是一个同质数据块。ndarray 有跨步信息。该数值是维度中下一个元素的字节数。
这有助于数组在内存中导航,并且不需要复制数据。
每个 ndarray 都包含一个指向其在计算机中的内存位置的指针。它还包含它的 dtype、它的形状和步幅元组。步幅是整数,表示它必须移动的字节数才能到达维度中的下一个元素。
数组包含相同类型的对象的集合,例如整数
要创建一个数组:
import numpy as np
a = np.array([1,2,3])
- 多维数组
多维数组有不止一列。
我们可以将多维数组视为 Excel 电子表格——它具有列和行。每一列都可以被视为一个维度。
我们可以实例化一个数组对象:
numpy.array([,.,.,.,])
numpy.array([1,2]) #1D
numpy.array([[1,2],[10,20]]) #2D#对于复杂类型
numpy.array([1,2], dtype=complex) #1D complex
如果要创建 3D 数组:
- 这将创建 3 个具有 4 行和 5 列的数组,每个数组具有随机整数。
3DArray = np.random.randint(10, size=(3, 4, 5))
还有其他类型可用,例如:
- 布尔值
- 整数(有符号和无符号)
- 浮点数
- 复杂的
何时使用数组
就像数组数据结构一样,Python 中的列表也是一种数据结构,列表是可变的,并且是有序的元素序列。它很灵活,可以保存任意数据。此外,我们可以有效地将项目附加到列表中。但是,列表比数组占用更多空间,数组是 C语言数组的封装。如果要执行数学运算,则应使用 Numpy 数组。此外,我们可以在数组上执行我们无法在列表上执行的算术函数。
创建数组的不同方法
- 如果要创建没有任何元素的数组
numpy.empty(2) #这将创建 2 个元素的一维数组
numpy.empty([2,3]) #这将创建二维数组(2 行,每列 3 列)
- 如果要创建一个0s的数组
numpy.zeros(2) #它将创建一个有2个元素的一维数组,都是0
#注意方法的参数是shape,它可以是int或tuple
- 如果要创建一个1s的数组
numpy.ones(2) # 这将创建具有 2 个元素的一维数组,均为 1
- 如果你想从一个元素序列创建一个numpy数组
numpy.asarray([python sequence]) #e.g. numpy.asarray([1,2])
- 从内存中的缓冲区创建numpy数组
#可以在内存中复制字符串
x = np.fromstring(‘hi’, dtype=’int8')
#直接引用字符串的缓冲区,这样可以节省内存,可以传入dtype参数,默认是float
a = np.frombuffer(x, dtype=’int8')
- 如果要创建一系列元素
array = np.arange(3) #array 将包含 0,1,2
- 如果要创建一个具有均匀分布的值的数组
#numpy.arange(first, last, step, type)
numpy.arange(0,6,2) # 返回[0,2,4]
- 如果要创建一个数组,其中值在一个区间之间呈线性间隔
#numpy.linspace(first, last, number)
numpy.linspace(0,10,5) # 返回[0,2.5,5,7.5,10]
- 如果要创建一个数组,其中值在一个间隔之间以对数间隔
#numpy.logspace(first, end, number)
a= numpy.logspace(1, 15, 4)
#[1.00000000e+01 4.64158883e+05 2.15443469e+10 1.00000000e+15]
- 随机数生成
np.random.rand(3,2) #3行,2列
添加/删除/排序元素
- 添加元素
a = [0]
np.append(a, [1,2]) #adds 1,2 at the end
# [0,1,2]
- 删除元素
# np.delete(array, 1) 从数组中删除元素1
a = np.delete([0,1,2], 1) #results in [0,2]
- 元素排序
对数组进行排序,请调用 sort(array, axis, kind, orderby) 函数
# np.sort(array1, axis=1, kind = 'quicksort')
a = np.sort([[0,3,2],[1,2,3]], axis=1, kind = 'quicksort' )
#[[0 2 3]
# [1 2 3]]
NumPy 数组函数和属性
- shape:查找数组的维度(列数/行数)
#array = np.array([[..],[..]])
#print(array.shape)
a = np.array([[1,2],[3,4]])
print(a.shape)
# (2,2) # 行、列
#可以通过设置 shape 属性来改变数组的形状(调整大小)
array.shape = (1,2) #1 行 2 列
#如果想在不复制任何数据的情况下更改数组的形状,可以使用reshape()方法
array = np.arange(10)
array.reshape(2,5) #这将返回一个2行5列的数组
#还可以将维度值设置为 -1,这将让 Numpy 从数据中推断出维度
#想展平一个数组而不返回一个副本,我们可以使用 ravel() 函数
array.ravel() # 这会将上面的数组重塑为1d的10个元素
#我们想展平一个数组并生成一个副本,那么我们可以使用 flatten() 方法
a = array.flatten() #这将返回一个一维数组
- 如果我们要求一个数组的维度
a = np.array([[1,2],[3,4]])
print(a.ndim)
- 如果我们要求一个数组每个元素的长度
a = np.array([0,1,2]).itemsize
print(a)
- 如果我们想要对数组的一个子集进行切片
array = np.arange(100)
#获取第三个元素:
array[2] #prints 2
#获取索引中的项目
array[3:5] #3 是开始,5 是结束, prints [3 4]
#获取3-10个元素,步长是4:
array[2:9:4] #prints [2 6]
#从第二个元素开始获取所有元素
array[1:] #prints [1-99]
#也可以传入N维索引
array = np.array([[0,1,3],[1,2,4]])
print(array[[0,1],[1,2]]) #prints [1 4]
- 数组切片中的条件
#获取所有 NAN 元素
array[np.isnan(array)]
#where()可用于传入布尔表达式
np.where(array > 2) # 将返回所有符合条件的元素
- 广播数组
#当对两个不同大小的数组执行数学运算时,较小的数组被广播到较大数组的大小
large_array = np.arange(15).reshape(5,3) #5 行 3 列数组
small_array = np.arange(5).reshape(5,1) #5 行 1 列数组
final_array = small_array * large_array
print (final_array)
需要注意的关键是广播兼容两个数组,其中第一个数组的列数与第二个数组的行数相同,或者任何数组的长度为 1。
- 连接数组
a = [1,2]
b= [3,4]
c = [a,b]
#输出:[[1, 2], [3, 4]]
np.concatenate(c)
#输出:[1 2 3 4]
np.stack(c) #
#输出:
#[[1 2]
#[3 4]]
# 可以使用 vstack 或 hstach 方法将它们堆叠起来
np.hstack(c) #
#输出:
#[1 2 3 4]
np.vstack(c) #
#输出:
#[[1 2]
#[3 4]]
- 字符串操作
可以使用字符串的操作,比如添加,大写,小写,替换等。
add(), upper(), lower(), replace()
- 创建 numpy 数组的深拷贝
new_array = np.copy(array)
要重复一个数组,我们可以使用 repeat() 或 tile() 函数。repeat(n) 将简单地重复每个元素 n 次。n 也可以是一个数组,其中每个元素将根据 n 的值以不同的方式重复,例如 [1,5] 意味着我们需要重复第一个元素一次,第二个元素重复 5 次。对于多维数组,我们可以传入axis属性。tile(array, (n,m)) 略有不同,因为除了重复元素之外,它还对 n 行和 m 列的项目进行平铺/堆叠。
- 自定义数组函数
使用 np.fromnpfunc(my_new_ufunc, elements) 创建新的 func,然后在 NumPy 数组上执行它
- 结构化数组
我们想创建一个包含多种数据类型元素的数组,那么我们可以创建一个结构化数组。我们可以设置 dtype,它是一个包含元素名称和类型的元组列表。结构化数组比 pandas DataFrame 更快,因为它们消耗更少的内存,因为每个元素都表示为固定数量的字节,它们是精简的,因此是高效的低级数组,也可以被视为表格结构。
type = [('column_1', np.int32, 'column_2', np.float64])
array = np.array([1,2], [2.4, -1], dtype=type)
- 数学函数
Numpy 提供了一系列强大的数学函数,由于 Numpy 具有丰富的数学特性,因此在 Numpy 之上构建了许多库
#加、减、乘、除、幂、模
#要对两个数组 a 和 b 执行基本算术函数:
a = [1,2]
b= [3,4]
c = np.add(a, b)
c = np.subtract(a, b)
c = np.multiply(a, b)
c = np.divide( a, b)
c = np.power(a, b)
c = np.power(a, 2)
#得到余数
c= np.mod(a, b)
c = np.remainder(a, b)
#四舍五入,ceiling向上取整,floor向下取整
#要更改数组所有元素的精度:
np.around(array, 4) # 4dp
np.ceil(array) #1.8 会变成 2
np.floor(array) #1.8 会变成 1
- 三角函数
array = [0, 1]
np.sin(array)
np.cos(array)
np.tan(array)
np.arcsin(array)
np.arccos(array)
np.arctan(array)
- 统计
a = [1,2]
np.amin(a, 0) #min in the axis
np.amax(a, 0) #max in the axis
np.percentile(a, 10)
np.median(a)
np.std(a)
np.average(a)
np.mean(a)
np.var(a)
- 代数
Numpy 包含一个称为 linalg 的模块。它具有许多代数函数
1. dot() #两个数组的点积
2. inner() #两个数组的内积
3. 行列式() #一个数组的行列式
4.solve() #求解矩阵方程
5. inv() #逆矩阵
6. matmul() #两个数组的矩阵乘积
关于 Numba 的注意事项
我们可以使用 Numba 为 Numpy 创建快速函数。Numba 函数本质上是纯 Python 函数。诀窍是使用 nb.jit(func) 将函数编译成更快的 Numba 版本。我们还可以在函数上使用 @numba.vectorize 装饰器将代码编译成 NumPy ufunc。尽管 Numba 不支持所有 Python 代码,但它可以处理大部分用纯 Python 编写的数值算法。
概括
本文概述了 NumPy 库的核心功能。自从 2005 年 NumPy 与 Numarray 的功能相结合以来,它已经获得了巨大的普及,并被认为是使用的关键 Python 库之一。
文章概述了 NumPy 数组的关键功能和属性,感谢阅读,Happy Code!
相关推荐
- Python设计模式 第 13 章 中介者模式(Mediator Pattern)
-
在行为型模式中,中介者模式是解决“多对象间网状耦合”问题的核心模式。它就像“机场调度中心”——多个航班(对象)无需直接沟通起飞、降落时间,只需通过调度中心(中介者)协调,避免航班间的冲突与混乱...
- 1.3.1 python交互式模式的特点和用法
-
什么是Python交互模式Python交互模式,也叫Python交互式编程,是一种在Python解释器中运行的模式,它允许用户在解释器窗口中输入单个Python语句,并立即查看结果,而不需要编写整个程...
- Python设计模式 第 8 章 装饰器模式(Decorator Pattern)
-
在结构型模式中,装饰器模式是实现“动态功能扩展”的核心模式。它就像“手机壳与手机的关系”——手机(原始对象)具备通话、上网等基础功能,手机壳(装饰器)可在不改变手机本身的前提下,为其新增保护、...
- python设计模式 综合应用与实战指南
-
经过前面16章的学习,我们已系统掌握创建型模式(单例、工厂、建造者、原型)、结构型模式(适配器、桥接、组合、装饰器、外观、享元、代理)、行为型模式(责任链、命令、迭代器、中介者、观察者、状态、策略...
- Python入门学习教程:第 16 章 图形用户界面(GUI)编程
-
16.1什么是GUI编程?图形用户界面(GraphicalUserInterface,简称GUI)是指通过窗口、按钮、菜单、文本框等可视化元素与用户交互的界面。与命令行界面(CLI)相比,...
- Python 中 必须掌握的 20 个核心:str()
-
str()是Python中用于将对象转换为字符串表示的核心函数,它在字符串处理、输出格式化和对象序列化中扮演着关键角色。本文将全面解析str()函数的用法和特性。1.str()函数的基本用法1.1...
- Python偏函数实战:用functools.partial减少50%重复代码的技巧
-
你是不是经常遇到这样的场景:写代码时同一个函数调用了几十次,每次都要重复传递相同的参数?比如处理文件时总要用encoding='utf-8',调用API时固定传Content-Type...
- 第2节.变量和数据类型【第29课-输出总结】
-
同学们,关于输出的知识点讲解完成之后,把重点性的知识点做一个总结回顾。·首先对于输出这一章节讲解的比如有格式化符号,格式化符号这里需要同学们额外去多留意的是不是百分号s格式化输出字符串。当然课上也说百...
- AI最火语言python之json操作_python json.loads()
-
JSON(JavaScriptObjectNotation,JavaScript对象表示法)是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写。JSON是一种常用的数据格式,比如对接各种第...
- python中必须掌握的20个核心函数—split()详解
-
split()是Python字符串对象的方法,用于将字符串按照指定的分隔符拆分成列表。它是文本处理中最常用的函数之一。一、split()的基本用法1.1基本语法str.split(sep=None,...
- 实用方法分享:pdf文件分割方法 横向A3分割成纵向A4
-
今天在街上打印店给儿子打印试卷时,我在想:能不能,把它分割成A4在家中打印,这样就不需要跑到街上的打印店打印卷子了。原来,老师发的作业,是电子稿,pdf文件,A3格式的试卷。可是家中的打印机只能打印A...
- 20道常考Python面试题大总结_20道常考python面试题大总结免费
-
20道常考Python面试题大总结关于Python的面试经验一般来说,面试官会根据求职者在简历中填写的技术及相关细节来出面试题。一位拿了大厂技术岗SpecialOffer的网友分享了他总结的面试经...
- Kotlin Data Classes 快速上手_kotlin快速入门
-
引言在日常开发中,我们常常需要创建一些只用来保存数据的类。问题是,这样的类往往需要写一堆模板化的方法:equals()、hashCode()、toString()……每次都重复,既枯燥又容易出错。//...
- python自动化RobotFramework中Collections字典关键字使用(五)
-
前言介绍安装好robotframework库后,跟之前文章介绍的BuiltIn库一样BuiltIn库使用介绍,在“python安装目录\Lib\site-packages\robot\librarie...
- Python中numpy数据分析库知识点总结
-
Python中numpy数据分析库知识点总结二、对已读取数据的处理②指定一个值,并对该值双边进行修改③指定两个值,并对第一个值的左侧和第二个值的右侧进行修改2.4数组的拼接和行列交换①竖直拼接(np...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Python设计模式 第 13 章 中介者模式(Mediator Pattern)
- 1.3.1 python交互式模式的特点和用法
- Python设计模式 第 8 章 装饰器模式(Decorator Pattern)
- python设计模式 综合应用与实战指南
- Python入门学习教程:第 16 章 图形用户界面(GUI)编程
- Python 中 必须掌握的 20 个核心:str()
- Python偏函数实战:用functools.partial减少50%重复代码的技巧
- 第2节.变量和数据类型【第29课-输出总结】
- AI最火语言python之json操作_python json.loads()
- python中必须掌握的20个核心函数—split()详解
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)