第二章Numpy数组计算(1)

任务2.1 掌握NumPy数组对象ndarray

2.1.1 创建数组对象

NumPy提供了两种基本的对象。

  1. ndarray(N-dimensional Array Object):存储单一数据类型的多维数组。
  2. ufunc(Universal Function Object):能够对数组进行处理的函数

(1)数组属性

在创建数组之前,需要先了解数组的基本属性,数组的属性及其说明如下表。

(2)数组创建

1.NumPy提供的array函数可以创建一维或多维数组,其基本使用格式如下。

numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0, like=None)

array函数主要参数及其说明如下表。

2.除了使用array函数创建数组之外,还可以使用arange函数创建数组。arange函数类似于Python自带的函数range,通过指定开始值、终值和步长来创建一维数组,创建的数组不含终值。arange函数的基本使用格式如下。

numpy.arange([start, ]stop, [step, ]dtype=None, *, like=None)

arange函数常用参数及其说明如下表。

代码 2-3 使用arange函数创建数组

3.linspace函数通过指定开始值、终值和元素个数来创建一维数组,默认设置包括终值,这一点需要和arange函数区分。linspace函数的基本使用格式如下。

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

linspace函数的常用参数及其说明如下表。

4.logspace函数和linspace函数类似,它创建的是等比数列。logspace函数的基本使用格式如下。

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0)

在logspace函数的参数中,除了base参数和linspace函数的retstep参数不同之外,其余均相同。

NumPy还提供了其他函数用于创建特殊数组,如zeros、eye、diag和ones函数等。

zeros函数:用于创建值全部为0的数组,即创建的数组值全部填充为0。

eye函数:用于生成主对角线上的元素为1,其他的元素为0的数组,类似单位矩阵。

diag函数:创建类似对角的数组,即除对角线外的其他元素都为0,对角线上的元素可以是0或其他值。

ones函数:用于创建元素全部为1的数组,即创建的数组元素全部填充为1。

(3)数组数据类型

1.在实际的业务数据处理中,为了更准确地计算结果,需要使用不同精度的数据类型。

2.NumPy极大程度地扩充了原生Python的数据类型。

3.在NumPy中,所有数组的数据类型是同质的,即数组中的所有元素类型必须是一致的。

4.将元素类型保持一致可以更容易确定该数组所需要的存储空间。

下面将创建一个用于存储餐饮企业库存信息的数据 类型。其中,用一个能存储40个字符的字符串来记录商品的名称,用一个64位的整数来记 录商品的库存数量,最后用一个64位的单精度浮点数来记录商品的价格,具体步骤如下

2.1.2 生成随机数

手动创建数组往往很难达到数量要求,NumPy提供了强大的生成随机数的功能。然而,真正的随机数很难获得,在实际中使用的都是伪随机数。在大部分情况下,伪随机数就能满足获取的需求。当然,某些特殊情况除外,如进行高精度的模拟实验。 对于NumPy,与随机数相关的函数都在random模块中,其中包括了可以生成服从多种概率分布随机数的函数。

random函数是最常见的生成随机数的方法,random函数的基本使用格式如下。

numpy.random.random(size=None)

参数size接收int,表示返回的随机浮点数大小,默认为None。

rand()函数

rand函数可以生成服从均匀分布的随机数,其使用格式如下。

numpy.random.rand(d0, d1, ..., dn)

参数d0, d1, ..., dn接收int,表示返回数组的维度必须是非负数。如果没有给出参数,那么返回单个Python浮点数,无默认值。

randn函数可以生成服从正态分布的随机数,randn函数的使用格式和参数说明与rand函数相同。

randint()函数

randint函数可以生成给定上下限范围的随机数,其基本使用格式如下。

numpy.random.randint(low, high=None, size=None, dtype=int)

randint函数的常用参数及其说明如下表。

在random模块中,其他常用于生成随机数的函数如下表。

2.1.3 通过索引访问数组

NumPy通常以提供高效率的数组著称,这主要归功于索引的易用性。

1. 一维数组的索引

一维数组的方法很简单,与Python中的list的索引方法一致。

2. 多维数组的索引

多维数组的每一个维度都有一个索引,各个维度的索引之间用逗号隔开。

多维数组同样也可以使用整数序列和布尔值索引进行访问。

多维数组也可以使用整数序列索引和布尔值索引进行访问,如下代码2-20

2.1.4 变换数组的形态

在NumPy中,常用reshape函数改变数组的“形状”,即改变数组的维度。reshape函数的基本使用格式如下。

numpy.reshape(a, newshape, order='C')

reshape函数在改变原始数据的形状的同时不改变原始数据的值。如果指定的维度和数组的元素数目不吻合,那么函数将抛出异常。

reshape函数的常用参数及其说明如下表。

ravel( )函数

在NumPy中,可以使用ravel函数完成数组展平工作。

flatten( )函数

flatten函数也可以完成数组展平工作。与ravel函数的区别在于,flatten函数可以选择横向或纵向展平。

hstack( )函数

除了可以改变数组“形状”外,NumPy也可以对数组进行组合。组合主要有横向组合与纵向组合。使用hstack函数、vstack函数和concatenate函数可完成数组的组合。

横向组合是将ndarray对象构成的元组作为参数,传给hstack函数。

vstack( )函数

纵向组合同样是将ndarray对象构成的元组作为参数,传给vstack函数。

concatenate( )函数

concatenate函数也可以实现数组的横向组合和纵向组合,其中当参数axis=1时,数组按照横向组合,当参数axis=0时,数组按照纵向组合。

除了对数组进行横向和纵向的组合之外,还可以对数组进行分割。NumPy提供了hsplit、vsplit、dsplit和split函数,可以将数组分割成相同大小的子数组,也可以指定原数组中需要分割的位置。

hsplit()函数

可以对数组进行横向分割,以ndarray对象构成的元组作为参数

vsplit()函数

可以对数组进行纵向分割,以ndarray对象构成的元组作为参数。

split()函数

同样可以实现数组分割。当参数axis=1时,可以对数组进行横向分割;当参数axis=0时,可以对数组进行纵向分割。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值