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中,数组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 |
uint8 | 表示无符号整数,范围为0~255 |
uint16 | 表示无符号整数,范围为0~65535 |
uint32 | 表示无符号整数,范围为0~2³²-1 |
uint64 | 表示无符号整数,范围为0~2 |
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函数创建数组时,数组的数据类型默认是浮点型。若需要自定义数组数据,则可以预先指定数据类型,如图所示:
标签:表示,函数,创建,元素,数据类型,数组,Numpy,ndarray From: https://blog.csdn.net/2301_81437523/article/details/139797464