科学计算库NumPy

1.认识NumPy数组对象

(1)NumPy中最重要的一个特点就是其N维数组对象,即ndarray(别名array)对象,该对象可以执行一些科学计算。

(2)ndarray对象中定义了一些重要的属性。

2.创建NumPy数组

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

# 创建一个一维数组
data1 = np.array([1, 2, 3])        输出        array([1, 2, 3])

# 创建一个二维数组
data2 = np.array([[1, 2, 3], [4, 5, 6]])    输出    array([[1, 2, 3],[4, 5, 6]])

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

# 创建元素值全是0的数组
np.zeros((3, 4))    输出    array([[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]])


# 创建元素值全是1的数组
np.ones((3, 4))    输出    array([[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1..]])

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

 创建元素值全是随机数的数组
np.empty((5, 2))    
输出    
array([[-2.00000000e+000, -2.00390463e+000],
[ 2.37663529e-312,  2.56761491e-312],
[ 8.48798317e-313,  9.33678148e-313],
[ 8.70018275e-313,  2.12199581e-314],
[ 0.00000000e+000,  6.95335581e-309]])

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

np.arange(1, 20, 5)
输出
array([ 1,  6, 11, 16])

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

03        ndarray对象的数据类型

(1)NumPy的数据类型是由一个类型名和元素位长的数字组成。

通过zeros()、ones()、empty()函数创建的数组,默认的数据类型为float64。
默认情况下,64位windows系统输出的结果为int32, 64位Linux或macOS系统输出结果为int64,当然也可以通过dtype来指定数据类型的长度。

(2)NumPy中常用的数据类型如下表所示 

 (3)每一个NumPy内置的数据类型都有一个特征码,它能唯一标识一种数据类型。

 04    数组运算

(1)数组运算可以分为以下三种:

 (2)当形状不相等的数组执行算术计算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样就可以进行矢量化运算了

(3)标量运算会产生一个与数组具有相同行和列的新矩阵,其原始矩阵的每个元素都被相加、相减、相乘或者相除。

05    05        ndarray的索引和切片

(1)对于多维数组来说,索引和切片的使用方式与列表就大不一样了,比如二维数组的索引方式如下:

(2)要操作的对象是一个二维数组,则获取的结果就是对应下标的一行数据。

 

 (3)用两个花式索引操作数组,则会将第1个作为行索引,第2个作为列索引,以二维数组索引的方式选取其对应位置的元素。

 

 (3)布尔型索引指的是将一个布尔数组作为数组索引,返回的数据是布尔数组中True对应位置的值。

 06    数组的转置和轴对称

(1)数组的转置指的是将数组中的每个元素按照一定的规则进行位置变换。

NumPy提供了两种实现方式:

T属性
transpose()方法

(2) 简单的转置可以使用T属性,它其实就是进行轴对换而已

(3) 当使用transpose()方法对数组的shape进行调换时,需要以元组的形式传入shape的编号,比如(1,0,2)。

(4)如果我们不输入任何参数,直接调用transpose()方法,则其执行的效果就是将数组进行转置,作用等价于transpose(2,1,0)。

 

(5) 有时可能只需要转换其中的两个轴,这时可以使用swapaxes()方法实现,该方法需要接受一对轴编号,比如(1,0)。

 

07 NumPy通用函数

(1)通用函数(ufunc)是一种针对ndarray中的数据执行元素级运算的函数,函数返回的是一个新的数组。

我们将ufunc中接收一个数组参数的函数称为一元通用函数,接受两个数组参数的则称为二元通用函数。

 常见的一元通用函数如下表:

 常见的一元通用函数如下表:

 常见的二元通用函数如下表:

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

(1)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)

 (2)通过NumPy库中的相关方法,我们可以很方便地运用Python进行数组的统计汇总。

(3)NumPy提供的有关集合的函数还有很多,常见的函数如下表所示。

 09    线性代数模块

(1)numpy.linalg模块中有一组标准的矩阵分解运算以及诸如逆和行列式之类的东西。

例如,矩阵相乘,如果我们通过“*”对两个数组相乘的话,得到的是一个元素级的积,而不是一个矩阵点积。

 (2)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)

 (3)除此之外,linalg模块中还提供了其他很多有用的函数

 10    随机数模块

(1)与Python的random模块相比,NumPy的random模块功能更多,它增加了一些可以高效生成多种概率分布的样本值的函数。

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

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

 (2)random模块中还包括了可以生成服从多种概率分布随机数的其它函数。

 (3)seed( )函数可以保证生成的随机数具有可预测性,也就是说产生的随机数相同。

numpy.random.seed(seed=None)

上述函数中只有一个seed参数,用于指定随机数生成时所用算法开始的整数值。

 (4)当调用seed()函数时,如果传递给seed参数的值相同,则每次生成的随机数都是一样的。当传递的参数值不同或者不传递参数时,则seed()函数的作用跟rand()函数相同,即多次生成随机数且每次生成的随机数都不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值