Numpy基础(1.0)

在机器学习和深度学习中,图像、声音、文本等输入数据最终都要转换为数组或矩阵。如何有效地进行数组合矩阵的运算?这就需要充分利用Numpy。Numpy是数据科学的通用语言,而且与pytorch关系密切,它是科学计算、深度学习的基石。Pytorch中的Tensor与Numpy非常相似,他们之间可以非常方便的进行转换。

为什么是Numpy?实际上Python本身含有列表(list)和数组(array),但对于大数据来说,这些结构是由很多不足的。由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。例如为了保存一个简短的[1,2,3]都需要有3个指针和3个整数对象。对于数值运算来说,这种结构显然比较浪费内存和CPU等宝贵资源。至于array对象,他可以直接保存数值,和C语言的一维数组比较类似。但是它不支持多维,在上面的函数也不多,因此不适合做数值运算。

Numpy(Numpy Python的简称)的诞生弥补了这些补助。Numpy提供了两种基本对象:ndarray和ufunc。ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。

Numpy的主要特点:

(1)ndarray,快速结束呢个空间的多维数组,提供署驻华的算术运算和高级的广播功能。

(2)使用标准数学函数对整个数组的数据进行快速运算,且不需要编写循环。

(3)读取/写入磁盘上的阵列数据和操作存储器映像文件的工具

(4)线性代数、随机生成和傅里叶变换的能力。

(5)继承C、C++、Fortran代码的工具。

1.1生成Numpy数组

Numpy是Python的外部库,不在标准库中。因此,若要使用它,需要先导入Numpy。

import numpy as np

导入Numpy后,可通过np.+Tab键,查看可食用的函数,若果对其中一些函数的使用补水很清楚,还可以再对应函数+?,再运行,就可以很方便的看到如何使用函数的帮助信息。

Numpy不但强大,而且还非常友好。下面将介绍Numpy的一些常用方法,尤其是鱼机器学习、深度学习相关的一些内容

Numpy封装了一个新的数据类型ndarray,它是一个多维数组对象。该对象封装了血多常用的数学运算函数,方便我们做数据处理、数据分析等。那么如何生成ndarray呢?这里介绍生成ndarray的集中方式,如从已有数据中创建,利用random创建,创建特定形状的多维数组,利用arrange、linespace函数生成等。

1.1.1从已有数据中创建数组

直接对Python的基础数据类型(如列表、元组等)进行转换来生成ndarray。

(1)将列表转换成ndarray

Numpy基础(1.0)

(2)嵌套列表可以转换成多维ndarray;

Numpy基础(1.0)

如果把上面实例中的列表换成元组也同样适用。

1.1.2利用random模块生成数组

在深度学习中,我们经常对一些参数进行初始化,因此为了更有效地训练模型,提高模型的性能,有些初始化还需要满足一定的条件,如满足正态分布或均匀分布等。这里姐好啊了几种常用的方法。

np.random模块常用函数

函数描述np.random.random生成0到1之间的随机数np.random.uniform生成均匀分布的随机数np.random.randn生成标准正态的随机数np.random.randint生成随机的整数np.random.normal生成正态分布np.random.shuffle随机打乱顺序np.random.seed设置随机的种子random_sample生成随机的浮点数

下面来看一些函数的具体使用:

import numpy as np
nd3=np.random.random([3,3])
print(nd3)
print("nd3的形状为:",nd3.shape)

Numpy基础(1.0)

为了每次生成同一份数据,可以指定一个随机种子,使用shuffle函数打乱生成的随机数。

import numpy as np
np.random.seed(123)
nd4=np.random.randn(2,3)
print(nd4)
np.random.shuffle(nd4)
print("随机打乱后的数据:")
print(nd4)
print(type(nd4))

Numpy基础(1.0)

1.1.3创建特定形状的多维数组

参与初始化时,有时需要生成一些特殊矩阵,如全是0或1的数组或矩阵,这时我们可以利用np.zeros、np.ones、np.diag来实现。

Numpy数组创建函数

函数描述np.zeros((3,4))创建34的元素全为0的数组np.ones((3,4))创建34全为1的数组np.empty((2,3))创建23的空数组,空数据中的值并不为0,而是未初始化的垃圾值np.zeros_like(ndarr)以ndarr相同维度创建元素全为0的数组np.ones_like(ndarr)以ndarr相同维度创建元素全为1的数组np.empty_like(ndarr)以ndarr相同维度创建空数组np.eye(5)该函数用于创建一个55的矩阵,对角线为1,其余为0np.full((3,5),666)创建3*5的元素全为666的数组,666为指定值

有时还可能把生成的数据暂时保存起来,以备后续使用。

Numpy基础(1.0)

1.1.4利用arange、linespace函数生成数组

arange是numpy模块中的函数,其格式为:

arange ([start,]stop[,step,],dtype=None)

其中start与stop用来指定范围,step用来设定步长。在生成一个ndarray时,start默认为0,步长step可为小数。Python有个内置函数range,其功能与此类似。

import numpy as np
print(np.arange(10))
print(np.arange(0,10))
print(np.arange(0,4,0.5))

Numpy基础(1.0)

linspace也是numpy模块中常用的函数,其格式为:

np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)

linspace可以根据输入的制定数据范围以及等份数量,自动生成一个线性等分向量,其中endpoint(包含终点)默认为True,等分数量num默认为50.如果将retstep设置为True,这会返回一个呆不长的ndarray。

import numpy as np
print(np.linspace(0,1,10))

Numpy基础(1.0)

指的一提的是,这里并没有像我们预期的那样,生成0.1,0.2…1.0这样步长为0.1的ndarray,这是因为linspace必定会包含数据起点和终点,那么步长则为(1-0)/9=0.11111111.如果需要产生0.1,0.2…1.0这样的数据,只需要将数据的起点修改为0.1即可。

Numpy基础(1.0)

除了上面介绍到的arange和linspace,Numpy还提供了logspace,该函数的使用方法与linspace的使用方法一样。

Numpy基础(1.0)

1.2获取元素

下面将介绍几种常用的获取数据的方法。

import numpy as np
np.random.seed(2022)
nd11=np.random.random(([10]))
#获取指定位置的数据,获取第4个元素
print("--------1-----------")
print(nd11[3])
#截取一段数据
print("--------2-----------")
print(nd11[3:6])
#按固定间隔截取
print("--------3-----------")
print(nd11[1:6:2])
#倒序取数
print("--------4-----------")
print(nd11[::-2])
#截取一个多维数组的一个区域内数据
nd12=np.arange(25).reshape([5,5])
print("--------5-----------")
print(nd12)
print(nd12[1:3,1:3])
#截取多维数组中,数值在一个值域之内的数据
print("--------6-----------")
print(nd12[(nd12>3)&(nd12

Numpy基础(1.0)

Original: https://blog.csdn.net/mez_Blog/article/details/122574433
Author: mez_Blog
Title: Numpy基础(1.0)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/763286/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球