科学计算库NumPy


我只是整理了一下黑马程序员的笔记,如有需要请购买正版图书

科学计算库NumPy

01 认识NumPy数组对象

ndarray对象中定义了一些重要的属性

在这里插入图片描述

02 创建NumPy数组

创建NumPy数组

1.最简单的创建ndarray对象的方式是使用array()函数,在调用该函数时传入一个列表或者元组
#创建一个一维数组

data1 = np.array([1, 2, 3])

#创建一个二维数组

data2 = np.array([[1, 2, 3], [4, 5, 6]])

2.通过zeros()函数创建元素值都是0的数组;通过ones()函数创建元素值都为1的数组

#创建元素值全是0的数组

np.zeros((3, 4))

#创建元素值全是1的数组

np.ones((3, 4))

3.通过empty()函数创建一个新的数组,该数组只分配了内存空间,它里面填充的元素都是随机的
#创建元素值全是随机数的数组

np.empty((5, 2))

4.通过arange()函数可以创建一个等差数组,它的功能类似于range(),只不过arange()函数返回的结果是数组,而不是列表

np.arange(1, 20, 5)

注:大家可能注意到,有些数组元素的后面会跟着一个小数点,而有些元素后面没有,比如1和1.,产生这种现象,主要是因为元素的数据类型不同所导致的

03 ndarray对象的数据类型

查看数据类型

ndarray.dtype可以创建一个表示数据类型的对象,如果希望获取数据类型的名称,则需要访问name属性进行获取

data_one = np.array([[1, 2, 3], [4, 5, 6]])
data_one.dtype.name	

NumPy的数据类型是由一个类型名和元素位长的数字组成
1.通过zeros()、ones()、empty()函数创建的数组,默认的数据类型为float64。
2.默认情况下,64位windows系统输出的结果为int32, 64位Linux或macOS系统输出结果为int64,当然也可以通过dtype来指定数据类型的长度。
在这里插入图片描述
每一个NumPy内置的数据类型都有一个特征码,它能唯一标识一种数据类型
在这里插入图片描述

转换数据类型

ndarray对象的数据类型可以通过astype()方法进行转换

data = np.array([[1, 2, 3], [4, 5, 6]]) 
data.dtype

#数据类型转换为float64

float_data = data.astype(np.float64)
float_data.dtype

04 数组运算

数组运算

在这里插入图片描述
1.矢量化运算

形状相等的数组之间的任何算术运算都会应用到元素级,即只用于位置相同的元素之间,所得的运算结果组成一个新的数组
在这里插入图片描述
2.数组广播
当形状不相等的数组执行算术计算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样就可以进行矢量化运算了
在这里插入图片描述
注:广播机制需要满足如下任意一个条件即可:
(1)两个数组的某一维度等长。
(2)其中一个数组为一维数组。
广播机制需要扩展维度小的数组,使得它与维度最大的数组的shape值相同,以便使用元素级函数或者运算符进行运算。

3.数组与标量间的运算
标量运算会产生一个与数组具有相同行和列的新矩阵,其原始矩阵的每个元素都被相加、相减、相乘或者相除
在这里插入图片描述

05 ndarray的索引和切片

06 数组的转置和轴对称

数组的转置和轴对称

简单的转置可以使用T属性,它其实就是进行轴对换而已
在这里插入图片描述

当使用transpose()方法对数组的shape进行调换时,需要以元组的形式传入shape的编号,比如(1,0,2)
在这里插入图片描述
注:如果我们不输入任何参数,直接调用transpose()方法,则其执行的效果就是将数组进行转置,作用等价于transpose(2,1,0)。
有时可能只需要转换其中的两个轴,这时可以使用swapaxes()方法实现,该方法需要接受一对轴编号,比如(1,0)
在这里插入图片描述
在这里插入图片描述

07 NumPy通用函数

NumPy通用函数

在这里插入图片描述
在这里插入图片描述
常见的二元通用函数如下表:
在这里插入图片描述

注:我们将ufunc中接收一个数组参数的函数称为一元通用函数,接受两个数组参数的则称为二元通用函数,函数返回的是一个新的数组

08 利用NumPy数组进行数据处理

将条件逻辑转为数组运算

NumPy的where()函数是三元表达式x if condition else y的矢量化版本。

arr_x = np.array([1, 5, 7])
arr_y = np.array([2, 6, 8])
arr_con = np.array([True, False, True])
result = np.where(arr_con, arr_x, arr_y)

通过NumPy库中的相关方法,我们可以很方便地运用Python进行数组的统计汇总
在这里插入图片描述

arr = np.array([[6, 2, 7], 
                         [3, 6, 2], 
                         [4, 3, 2]])
arr.sort()

如果希望对任何一个轴上的元素进行排序,则需要将轴的编号作为sort()方法的参数传入

arr = np.array([[6, 2, 7], 
                         [3, 6, 2], 
                         [4, 3, 2]])
# 沿着编号为0的轴对元素排序
arr.sort(0)

all()函数用于判断整个数组中的元素的值是否全部满足条件,如果满足条件返回True,否则返回False。

arr = np.array([[1, -2, -7], 
                         [-3, 6, 2], 
                         [-4, 3, 2]])
# arr的所有元素是否都大于0
np.all(arr > 0)

any()函数用于判断整个数组中的元素至少有一个满足条件就返回True,否则就返回False。

arr = np.array([[1, -2, -7], 
                         [-3, 6, 2], 
                         [-4, 3, 2]])
# arr的所有元素是否有一个大于0
np.any(arr > 0)

针对一维数组,NumPy提供了unique()函数来找出数组中的唯一值,并返回排序后的结果。

arr = np.array([12, 11, 34, 23, 12, 8, 11])
np.unique(arr)

in1d()函数用于判断数组中的元素是否在另一个数组中存在,该函数返回的是一个布尔型的数组。

arr = np.array([12, 11, 34, 23, 12, 8, 11])
np.in1d(arr, [11, 12])

NumPy提供的有关集合的函数还有很多,常见的函数如下表所示。
在这里插入图片描述

09 线性代数模块

线性代数模块

numpy.linalg模块中有一组标准的矩阵分解运算以及诸如逆和行列式之类的东西
注:矩阵相乘,如果我们通过“*”对两个数组相乘的话,得到的是一个元素级的积,而不是一个矩阵点积。
NumPy中提供了一个用于矩阵乘法的dot()方法。

arr_x = np.array([[1, 2, 3], [4, 5, 6]])
arr_y = np.array([[1, 2], [3, 4], [5, 6]])
# 等价于np.dot(arr_x, arr_y)
arr_x.dot(arr_y)

除此之外,linalg模块中还提供了其他很多有用的函数。
在这里插入图片描述

10 随机数模块

随机数模块

rand()函数隶属于numpy.random模块,它的作用是随机生成N维浮点数组

# 随机生成一个二维数组
np.random.rand(3, 3)

除此之外,random模块中还包括了可以生成服从多种概率分布随机数的其它函数。
在这里插入图片描述
注:seed( )函数可以保证生成的随机数具有可预测性,也就是说产生的随机数相同。当调用seed()函数时,如果传递给seed参数的值相同,则每次生成的随机数都是一样的。
当传递的参数值不同或者不传递参数时,则seed()函数的作用跟rand()函数相同,即多次生成随机数且每次生成的随机数都不同。

numpy.random.seed(seed=None)

本章小结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值