目录
一、前言
NumPy(Numerical Python的简称)是Python中一个非常重要的库,它主要用于进行大量的数值和矩阵计算。NumPy提供了一个高性能的多维数组对象,以及一系列用于操作这些数组的函数。这些数组是固定的类型,大小可以动态变化,支持复杂的数组索引和切片操作,并且提供了大量的数学函数库,以便在数组上进行操作。Numpy是用于数据科学计算的基础模块,不但能够完成科学计算的任务,而且能够用作高效的多维数据容器,可用于存储和处理大型矩阵。Numpy本身并没有提供很多高级的数据分析功能。理解Numpy数组及数组计算有助于更加高效地使用诸如pandas等数据处理工具。
二、掌握Numpy数组对象ndarray
python提供了一个array模块。array和list不同,array直接保存数值,和C语言的一维数组比较类似。但是由于python的array模板不支持多维,也没有各种运算函数,因此不适合做数值运算。Numpy弥补了python不支持多维等不足之处,它提供了一种存储单一数据类型的多维数组----ndarray。
2.1.创建数组对象
Numpy提供了两种基本对象:ndarray和ufunc。ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。在Numpy中,维度称为轴。Numpy提供的array函数可以创建一维或多维数组。
arange函数的常用参数及其说明
参数名称 | 参数说明 |
---|---|
start | 接收 int 或实数。表示数组的开始值,生成的数组包括该值。默认为 0 |
stop | 接收 int 或实数。表示数组的终值,生成的数组不包括该值。无默认值 |
step | 接收 int 或实数。表示在数组中,值之间的步长。默认为 1 |
dtype | 接收数据类型。表示输出数组的类型。默认为 None |
个表格主要解释了 arange 函数的一些常见参数和它们的作用。请注意,这些信息可能适用于某种编程语言或特定的软件工具。如果大家需要进一步的帮助,请提供上下文或指定具体的编程环境。
首先我们先安装
pip install numpy
接下来就可以进行下一步了
创建一维数组与多维数组并查看属性的过程:
创建数组:
NumPy 提供了两种基本对象:ndarray
和 ufunc
。ndarray
是存储单一数据类型的多维数组,而 ufunc
则是对数组进行处理的函数。在 NumPy 中,维度被称为轴。通过 np.array()
函数,我们可以创建一维或多维数组。
#导入Numpy库
import numpy as np
#创建一维数组
arr1 = np.array([1,2,3,4])
print('创建的数组为:\n',arr1)
#创建二维数组
arr2 = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
print('创建的数组为:\n',arr2)
查看属性:
#查看数组形状
print('数组形状为:',arr2.shape)
#查看数组元素类型
print('数组元素类型为:',arr2.dtype)
#查看数组元素个数
print('数组元素个数为:'arr2.size)
#查看数组每个元素存储空间
print('数组每个元素存储空间为:',arr2.itemsize)
重新设置数组的shape:
#重新设置数组的shape
arr2.shape = 4,3
print('重新设置数组shape后arr2为:\n',arr2)
除了使用 array函数创建数组之外,还可以使用arange函数创建数组。arange函数类似于python自带的函数range,通过指定开始值、终值和步长来创建一维数组,创建的数组不含终值。
使用arange函数创建数组:
#使用arange函数创建数组
print('使用arange函数创建数组为:\n',np.arange(0,1.0.1))
logspace函数和linspace函数类似,但他创建的数组是等比数列,在logspace函数的参数中,除了base参数和linspace函数的retstep参数不同之外,其余均相同。base参数可用于设置日志空间的底数,在不设置的情况下,默认以10为底。
使用logspace函数创建的等比数:
#使用logspace函数创建的等比数
print('使用logspace函数创建的等比数列为:\n',np.logspace(0,2,20))
Numpy还提供了其他函数,用于创建特殊数组,如zeros,eye,diag和ones函数等。其中zeros 函数用于创建元素全部0的数组,即将创建的数组的元素全部填充为0。eye函数用于生成主对角线上的元素为1、其他元素0的二维数组,类似单位矩阵。diag 函数创建类似对角矩阵的数组,即除对角线上的元素以外的其他元素都为0,对角线上的元素可以是0或其他值。ones函数用于创建元素全部为1的数组,即将创建的数组的元素全部填充为1.
代码演示如下:
#使用zeros函数创建数组
print('使用zeros函数创建数组为:\n',np.zeros((2,3)))
#使用eye函数创建数组
print('使用eye函数创建数组为:\n',np.eye(3))
#使用diag函数创建数组
print('使用diag函数创建数组为:\n',np.diag([1,2,3,4]))
#使用ones函数创建数组
print('使用ones函数创建数组为:\n',np.ones((5,3)))
数组的数据类型转换:
NumPy 极大程度地扩展了 Python 的数据类型。在 NumPy 中,数组的数据类型是同质的,即数组中所有元素的数据类型必须是一致的。这使得更容易确定数组所需的存储空间。数组的数据类型转换示例如下:
#整数转换为浮点数
print('转换结果为:',np.float64(42))
#浮点数转换为整数
print('转换结果为:',np.int8(42.0))
#整数转换为布尔值
print('转换结果为:',np.bool_(42))
#整数转换为布尔值
print('转换结果为:',np.bool_(0))
#布尔值转换为浮点数
print('转换结果为:',np.float64(True))
#布尔值转换为浮点数
print('转换结果为:',np.float64(False))
为了更好地帮助读者理解数据类型,下面将创建一个用于存储餐饮企业库存信息的数据类型。其中,用一个能存储40个字符的字符串来记录商品的名称,用一个64位的整数来记录商品的库存数量,最后用一个64位的单精度浮点数来记录商品的价格,具体步骤如下。
(1)创建数据类型:
df = np.dtype([('name', np.str_, 40),('numitems', np.int64),('price', np.float64)])
print('数据类型为:\n',df)
(2)查看数据类型,可以直接查看或使用 Numpy中的dtype属性进行查看如代:
print('数据类型为:', df['name'])
print('数据类型为:', np.dtype(df['name']))
(3)在使用array函数创建数组时,数组的数据类型默认是浮点型。若需要自定义数组数据,则可以预先指定数据类型:
itemz = np.array([('tomatoes', 42, 4.14),('cabbages', 13, 1.72)],dtype=df)
print('自定义数据为:',itemz)
2.2.生成随机数
andom模块中其他常用随机数生成函数
函数 | 说明 |
---|---|
seed | 确定随机数生成器的种子 |
permutation | 返回一个序列的随机排列或返回一个随机排列的范围 |
shuffle | 对一个序列进行随机排序 |
binomial | 产生服从二项分布的随机数 |
normal | 产生服从正态(高斯)分布的随机数 |
beta | 产生服从 beta 分布的随机数 |
chisquare | 产生服从卡方分布的随机数 |
gamma | 产生服从 gamma 分布的随机数 |
uniform | 产生在 [0.0, 1.0) 中均匀分布的随机数 |
exponential | 产生服从指数分布的随机数 |
gumbel | 产生服从 Gumbel 分布的随机数 |
geometric | 产生服从几何分布的随机数 |
poisson | 产生服从泊松分布的随机数 |
rand_ | 产生服从指定分布的随机数 |
randint | 产生指定范围内的整数随机数 |
这个表格列出了一些Python中的random模块提供的用于生成各种分布的随机数的函数。每个函数都有相应的描述,例如seed用于确定随机数生成器的种子,permutation用于返回一个序列的随机排列或返回一个随机排列的范围,shuffle则用于对一个序列进行随机排序,等等。
使用random函数生成随机数:
print('生成的随机数为:\n',np.random.random(100))
使用rand函数生成服从均匀分布的随机数:
print('生成的随机数为:\n',np.random.rand(10,5)
使用randn函数生成服从正态分布的随机数:
print('生成的随机数为:\n',np.random.randn(10,5))
使用randint函数生成给定范围的随机数:
print('生成的随机数为:\n',np.random.randint(2,10,size=[2,5]))
NumPy提供了强大的生成随机数的功能。然而,真正的随机数很难获得,在实际中使围的都是伪随机数。在大部分储况下,伪随机教就能满足使用需求。当然,某些特珠情祝除外,如进行高精度的模批实验。对于 NumPy,与随机数相关的函数都在 random模块中,其中包括可以生成服从多种概率分布的随机数的函数。
NumPy的基本数据类型及其取值范围
类型 | 描述 |
---|---|
bool | 用1位存储的布尔值(值为True或False) |
inti | 表示由所在平台决定其精度的整数(一般为int32或int64) |
int8 | 表示整数,范围为-128~127 |
int16 | 表示整数,范围为-32768~32767 |
int32 | 表示整数,范围为-2^31~2^31-1 |
int64 | 表示整数,范围为-2^63~2^63-1 |
uint8 | 表示无符号整数,范围为0~255 |
uint16 | 表示无符号整数,范围为0~65535 |
uint32 | 表示无符号整数,范围为0~2^32-1 |
uint64 | 表示无符号整数,范围为0~2^64-1 |
float16 | 表示半精度浮点数(16位),其中用1位表示正负,用5位表示整数,用10位表示尾数 |
float32 | 表示单精度浮点数(32位),其中用1位表示正负,用8位表示整数,用23位表示尾数 |
float64 或 float | 表示双精度浮点数(64位),其中用1位表示正负,用11位表示整数,用52位表示尾数 |
complex64 | 表示复数,分别用两个32位浮点数表示实部和虚部 |
complex128 或 complex | 表示复数,分别用两个64位浮点数表示实部和虚部 |
datetime64[ns] | nanosecond分辨率的时间戳,表示从某个时间基准(通常是Unix epoch)到给定时刻的时间差 |
timedelta64[ns] | nanosecond分辨率的时间间隔,表示两个日期或时刻之间的差值 |
这个表格列出了NumPy支持的各种基本数据类型以及它们的描述,包括布尔型、整数型、无符号整数型、浮点数型、复数型等,并给出了每种类型的取值范围。
三、总结
NumPy凭借其ndarray对象和全面的数组操作功能,为Python环境下的科学计算和数据分析提供了坚实的基础。掌握ndarray的创建和管理,以及如何利用NumPy生成随机数,是迈向数据科学和机器学习领域专业技能的第一步。无论是进行基础的数学运算,还是复杂的统计分析,NumPy都是不可或缺的利器,助力科研人员和工程师在数据的海洋中探索未知,解决问题。
NumPy的未来充满机遇与挑战。它将继续作为数据科学领域的基石,引领着行业向前发展,同时不断自我进化,以适应科技和社会的快速变迁。无论是对专业数据科学家,还是对广大数据爱好者而言,掌握和运用NumPy都将是一项终身受益的技能。