掌握Numpy数组对象ndarray

Python提供了一个array模块。array和list不同,array直接保存数值,和C语言的一维数组比较类似。但是由于Python的array模块不支持多维,也没有各种运算函数,因此不适合做数值运算。NumPy弥补了Python不支持多维等不足之处,它提供了一种存储单一数据类型的多维数组--ndarray。本次将实现ndarray多维数组的创建、生成随机数、通过索引访问一维或多维数组并变换其形态。

一、创建数组对象

NumPy提供了两种基本的对象:ndarray(N-dimensional  Array)和ufunc(Universal Function)。ndarray是存储单一数据类型的多维数组,而ufunc则是能够对数组进行处理的函数。在NumPy中,维度称为轴。

1.数组属性

为了更好地理解和使用数组,在创建数组之前,了解数组的基本属性是十分有必要的。数组的属性及其说明如图所示。

属性名称属性说明
ndim返回int。表示数组的维数
shape返回tuple。表示数组形状,对于n行m列的矩阵,形状为(n,m)
size返回int。表示数组的元素总数,等于数组形状中各元素的积
dtype

返回data-type。表示数组中元素的数据类型

itemsize

返回int。表示数组的每个元素的存储空间(以B为单位)。例如,一个元素类型为float64的数组的itemsize属性值为8(float64占用64bit,1B为8bit,所以float64,占用8B)。一个元素类型为complex32的数组的itemsize属性值为4

2.数组创建

(1)Numpy提供的array函数可以创建一维或多维数组,其基本使用格式如下:
numpy.array(object,dtype=None, *,copy=True,order='k',subok=False,ndmin=0,like=None)
(2)array函数的主要参数及其说明如图所示:
参数名称参数说明
object接收array_like。表示所需创建的数组对象。无默认值
dtype接收data-type。表示数组所需的数组类型,如果未给定,那么选择保存对象所需的最小的数据类型。默认为None
ndmin接收int。用于指定生成数组应该具有的最小维数。默认为0
(3) 创建一维数组与多维数组并查看数组属性的过程,如图所示:

代码1-1

代码1-1

在代码1-1中,数组data只有一行元素,因此它是一维数组。而数组data2有3行4列元素,因此它是二维数组,第0轴的长度为3(即行数),第1轴的长度为4(即列数)。其中,第0轴也称横轴,第1轴也称纵轴。还可以通过修改数组的shape属性,在保持数组元素个数不变的情况下改变数组每个轴的长度。

代码1-2

代码1-2将数组data2的shape改为(4,3)。注意,从(3,4)改为(4,3)并不是对数组进行转置,而是改变每个轴的长度,数组元素的顺序并没有改变。 

代码2-1中的例子先创建了一个Python序列,然后通过array函数将其转换为数组,通过此方法创建数组显然效率不高。因此Numpy提供了很多专门用于创建数组的函数。

(4)除了使用array函数创建数组之外,还可以使用arange函数创建数组。arange函数类似于Python自带的函数range,通过指定开始值、终值和步长来创建一维数组,创建的数组不含终值。arange函数的基本使用格式如下:
numpy.arange([start,]stop,[step,]dtype=None,*,like=None)
(5)arange函数的常用参数及其说明如表所示:
参数名称参数说明
start接收int或实数。表示数组的开始值,生成的数组包括该值。默认为0
stop接收int或实数。表示数组的终值,生成的数组不包括该值。无默认值
step接收int或实数。表示在数组中,值之间的步长。默认为1
dtype接收数据类型。表示输出数组的类型。默认为None
 (6)使用arange函数创建数组如代码1-3所示:

代码1-3

(7)linspace函数通过指定开始值、终值和元素个数来创建一维数组,默认包括终值,这一点需要和arange函数区分。linspace函数的基本使用格式如下:
numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None,axis=0)
(8) linspace函数的常用参数及其说明:
参数名称参数说明
start接收array_like。表示起始值。无默认值
stop接收array_like。表示终值。无默认值
num接收int。表示生成的样本数。默认为50
dtype接收数据类型。表示输出数组的类型。默认为None
(9)使用linspace函数创建数组如代码所示:

(10)logspace函数和linspace函数类似,但它创建的数组是等比数列。logspace函数的基本 使用格式如下:
numpy.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None,axis=0)

       在logspace函数的参数中,除了base参数和linspace函数的retstep参数不同之外,其余均相同。base参数可用于设置日志空间的底数,在不设置的情况下,默认以10为底。

     (11)  使用logspace函数生成1-100的20个元素的等比数列,如图所示:

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

(12)其中,zeros函数用于创建元素全部为0的数组,即将创建的数组的元素全部填充为0,如图所示:

(13)eye函数用于生成主对角线上的元素为1、其他元素为0的二维数组,类似单位矩阵,如图所示:

 (14)diag函数创建类似对角矩阵的数组,即除对角线上的元素以外的其他元素都为0,对角线上的元素可以是0或其他值,如图所示:

(15)ones函数用于创建元素全部为1的数组,即将创建的数组的元素全部填充为1,如图所示:

 

3.数组数据类型

在实际的业务数据处理中,为了更准确地计算结果,需要使用不同精度的数据类型。NumPy极大程度地扩充了原生Python的数据类型。同时需要强调一点,在Numpy中,数组的数据类型是同质的,即数组中所有元素的数据类型必须是一致的。将元素数据类型保持一致可以更容易确定数组所需要的存储空间。NumPy的基本数据类型及其取值范围,如图所示。

类型描述
bool用1位存储的布尔值(值为True或False)
inti表示由所在平台决定其精度的整数(一般为int32或int64)
int8表示整数,范围为-128~127
int16表示整数,范围为-32768~32767
int32表示整数,范围为-2³¹~2³¹-1
int64表示整数,范围为-2^63~2^63-1
uint8表示无符号整数,范围为0~255
uint16表示无符号整数,范围为0~65535
uint32表示无符号整数,范围为0~2³²-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位浮点数表示实部和虚部

 Numpy数组中的每一种数据类型均有其对应的转换函数,如图所示:

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

(1)创建数据类型,如图所示:

(2)查看数据类型 

可以直接查看或使用Numpy中的dtype属性进行查看,如图所示:

(3)在使用array函数创建数组时,数组的数据类型默认是浮点型。若需要自定义数组数据,则可以预先指定数据类型,如图所示:

 

 4.小结

以上分享就基本讲解了Numpy的ndarray对象的属性及创建方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值