Python之NumPy使用

本文详细介绍了Python的科学计算库NumPy,包括其基本概念、基础数据结构如ndarray,常用函数,索引和切片,数据运算,广播机制,以及随机数的生成。NumPy提供强大的数组操作功能,适用于数据处理、数据分析和科学计算。通过学习NumPy,开发者可以创建高效的多维数组对象,执行数学和逻辑操作,是构建数据科学和机器学习环境的关键组件。
摘要由CSDN通过智能技术生成

欢迎关注

微信公众号:想进化的猿

头条号:python进阶者

 

一、NumPy基本概念

         NumPy是Python的一种开源数值计算扩展,是一种用Python实现的科学计算工具包,可用来存储和处理大型矩阵。Numpy提供的内容包括以下几部分:

        1、一个强大的N维数组对象Array,也就是ndarray;

        2、较为成熟的函数库;

        3、用于整合C/C++和Fortran代码的工具包;

        4、实用的线性代数、傅里叶变换和随机数生成函数。

        NumPy是一个运行速度非常快的数学库,它的主要功能就是数组计算。NumPy配合SciPy(高级科学计算库)、Matplotlib(绘图工具库)一起使用可组成强大的科学计算环境,可用于代替MatLab的功能,并且有助于我们通过Python学习数据科学和机器学习。

        关于NumPy的安装和系统学习可参考NumPy中文文档:https://www.numpy.org.cn

二、NumPy基础数据结构

         NumPy数组(即ndarray,以下统一用ndarray表示)是一个多维数组对象,它由两部分组成,包括:1、实际的数据。2、描述数据的元数据。

NumPy数组的创建

        NumPy创建数组最基本的方法是将序列传递给NumPy的array()函数,参数可以是列表、元组等,基本用法如下:

import numpy as np

arr1 = np.array([0, 1, 2, 3, 4])
arr2 = np.array((0, 1, 2, 3, 4))
print([0, 1, 2, 3, 4])
print((0, 1, 2, 3, 4))
print(arr1)
print(arr2)

        以上代码分别给array()函数传入一个列表和元组,生成的ndarray是一样的。作为对比,我们把源列表和元组也打印出来,运行结果如下图所示。从打印结果可以看出,Python的列表和元组数据间用逗号隔开,而ndarray的数据之间用空格隔开。

        ndarray还可以通过NumPy的arange()函数创建。arange()函数创建的是一个等差数组,它非常类似Python自身的range()函数,两者的区别仅仅在于返回值,arange()函数返回的是一个ndarray,而range()函数返回的是list。下面我们看一下arange()函数创建ndarray的基本用法。

import numpy as np

arr1 = np.arange(5)
arr2 = np.arange(1, 5)
arr3 = np.arange(1, 10, 2)

print(arr1)
print(arr2)
print(arr3)

        我们通过给arange()函数传入不同个数的参数分别创建了三个ndarray。arr1传入一个参数5,表示创建0~4共5个数的ndarray;arr2传入两个参数1,5,表示创建1~4的ndarray,arange与range一样,是不包括大数的,所以不能取到5;arr3传入3个参数,前两个参数表示数据范围1~9的整数,第三参数2表示以2为一个跨度,即取1,3,5,7,9这5个数为ndarray数据。运行结果如下所示。

        熟悉Matlab的朋友都知道linspace是一个均分计算指令,NumPy中也有linspace()函数,作用与Matlab中的linspace一致,它也可以用来创建ndarray。

import numpy as np

arr1 = np.linspace(1, 10, 4)
arr2 = np.linspace(1, 10, 4, endpoint=False)
arr3 = np.linspace(1, 10, 4, retstep=True)

print(arr1)
print(arr2)
print(arr3)

        运行结果如下,1~10区间4等分后的数据组成ndarray,且数据为浮点型。linspace中的endpoint参数表示是否包含最后一个值,这里是10,默认为True包含,设为False就不包含了;retstep参数表示是否返回步长,默认为False不包含,设为Ture返回一个元组,包括一个ndarray和一个步长值。

         以上我们创建的都是一维的ndarray,接下来我们创建几个多维的ndarray,基本创建方法如下。

import numpy as np

arr1 = np.array([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]])
arr2 = np.arange(1, 5).reshape(2, 2)
arr3 = np.arange(1, 12, 2).reshape(2, 3)

print(arr1)
print(arr2)
print(arr3)

        reshape()函数可以重新调整矩阵的行数、列数、维数,利用reshape()可以将一维ndarray调整为多维的ndarray。运行结果如下。

        通过array()函数想利用多维数组为参数来创建ndarray时,如果传入的多维数组个数不一样,NumPy不会报错,但不会如愿生成多维ndarray,而是会生成一维ndarray。当传入的多维数组中其中有字符串时,生成的多维ndarray就会自动转化成字符串类型,我们看一下效果。

import numpy as np

arr1 = np.array([[0, 1, 2, 3, 4], [5, 6, 7, 8]])
arr2 = np.array([[0, 1, 2, 3, 4], ['a', 'b', 'c', 'd', 'e']])

print(arr1)
print(arr2)

        arr1传入两个个数不同的数list,生成的是一个包含两个list类型的一维ndarray;arr2传入一个整型list和一个字符型list,生成的是一个字符型的二维ndarray。

        NumPy中还有一些常见的ndarray创建方式,包括zeros()、zeros_like()、ones()、ones_like()、eye()等函数。zeros()函数初始化一个数据全为0的ndarray;zeros_like()函数传入一个ndarray,生成一个形状一模一样、数据全为0的ndarray;ones()函数和ones_like()函数的功能与zeros()函数、zeros_like()函数类似,只是ones()函数和ones_like()函数生成的ndarray数据全为1。eye()函数创建一个行列数相同的单位矩阵ndarray,即对角线值全为1,其余值全为0的ndarray。这些函数的基本用法如下。

import numpy as np

arr1 = np.zeros(5)
arr = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
arr2 = np.zeros_like(arr)
arr3 = np.ones(5)
arr4 = np.ones_like(arr)
arr5 = np.eye(5)

print(arr1)
print(arr2)
print(arr3)
print(arr4)
print(arr5)

        运行结果如下所示。

NumPy数组的基本属性 

        首先,我们需要明确几个概念。数组的维数称为秩,一维数组的秩为1,二维数组的秩为2,依次类推。在NumPy中,每个线性的数组称为一个轴,秩描述的其实就是轴的数量。

        NumPy数组的常见属性有以下几个:

        ndim:ndarray的秩数(轴数),也就是数组的维度个数。

        shape:ndarray的形状,例如n行m列的ndarray,shape就是(n,m)。

        size:ndarray中所有元素的个数,例如n行m列的ndarray,size就是n*m。

        dtype:ndarray的元素类型。

        itemsize:ndarray中元素的字节大小,例如int32的字节大小为4,float64的字节大小为8。

        我们创建一个4行5列的整型数组,即n=4,m=5,分别看一下这几个属性。

import numpy as np

arr = np.arange(20).reshape(4, 5)

print(arr)
print('ndim: ' + str(arr.ndim))
print('shape: ' + str(arr.shape))
print('size: ' + str(arr.size))
print('dtype: ' + str(arr.dtype))
print('itemsize: ' + str(arr.itemsize))

        运行结果如下所示。对于4行5列的ndarray,轴数为2,形状为(4,5),共有4*5=20个数据,元素类型为int64,字节大小就是int64的字节大小,为8。

三、NumPy常用函数

改变数组形状的reshape()、resize()、T()

         reshape()函数的作用是重新调整ndarray的行数、列数、维数,根据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值