1。今天这篇文章主要介绍以下内容:Ⅰndarray数组与list的相互转换;Ⅱndarray数组的数据类型转换;Ⅲ改变ndarray数组的形状;说白了,大概就是3个功能。当然,这只是numpy函数中的冰山一角。这里只是介绍一下在学习numpy的过程中遇到的前几个函数。2.ndarray数组与列表的相互转换当你学习了numpy的时候,我想你一定已经学习了Python的基础知识。list列表这个基本数据类型大家肯定不会陌生。那么我们如何实现“列表”与“数组”的相互转换呢?①列表转数组:直接将一个列表传入array()函数listlist1=list(range(10))print(list1)array1=np.array(list1)print(array1)结果如下:②数组转换tolist:调用tolist()方法array2=np.arange(10)print(array2)list2=array2.tolist()print(list2)结果如下:3.ndarray数组的数据类型转换记住一句话:datatype在numpy中进行转换,不要使用x.dtype修改元素的数据类型,这样使用x.astype()比较好。①numpy中常用的数据类型这里只讲解numpy中常用的数据类型,int类型和float类型,但是一般不会直接写int和float,而是像int32,float64,所以简单说一下这个的意思32位或64位。在计算机中,底层执行由0和1组成的二进制指令。一个0或1代表一个二进制位,也叫“位(bit)”,其中32或64代表二进制位。按照计算机的换算单位,1字节=8个二进制位,即“1bytes=8bit”,因此,按照这种换算:“32bit-4bytes”,“64bit=8bytes”。基于以上分析,我们现在对int32做一个总结。int32表示数组中每个元素的数据类型都是int32。同时我们通过32可以知道数组中每个元素的存储空间是4个字节。那么这个范围大致就是[-2147483648,2147483647]。②用dtype就地修改数组的数据类型,会出现什么问题?x=np.array([1.2,3.4,5.6],dtype=np.float64)print(x)print(x.dtype)print(x.nbytes)#------------------------------------------x.dtype="float32"print(x)print(x.nbytes)#-----------------------------------------------x.dtype="float16"print(x)print(x.nbytes)结果如下:为什么会出现上述现象?通过上面的测试,我们发现,当我们使用“dtype”修改数组的数据类型时,每压缩一位(即一个“二进制位”)到原来的一半,其中的元素个数阵列将改变。是原来的两倍。为什么是这样?数组一旦创建,其数据类型就确定了,相当于开辟了一块内存用于存放数组。下面用一个公式来说明出现上述现象的原因。假设一个数组有x个元素,使用的数据类型是int64。该数据类型占用的内存大小为8字节,所以整个数组占用的内存大小为8*x。当数据类型变为int32时,数组中的数据类型变为4字节。通过上面的计算,我们已经知道这个数组开辟的内存是8x,所以元素个数就变成了8x/4-2*x,11也就是数组的元素翻倍了。③使用astype()函数修改数组的数据类型:相当于新建一个数组z=np.array([1.5,3.7,4.8])print(z)print(z.dtype)zzz=z.astype(np.float32)print(zz)print(zz.dtype)结果如下:4.改变ndarray数组的形状①使用numpy中的reshape()函数修改数组对象xx=np。arange(10).reshape(2,5)xxx=np.reshape(xx,(5,2))print(xxx)结果如下:②使用数组对象的reshape()方法修改数组objectyy=np.arange(10).reshape(2,5)print(yy)结果如下:③改变数组的形状时,如果维度大于1,可以设置“最后一个维度"对-1p=np.arange(6).reshape(2,3)print(p)q=np.arange(6).reshape(2,-1)print(q)结果如下:注:这样做的原因是,当您指定前一维时,最后一维将基于数组元素的数量和前一维的数量。自动计算最后一个维度的维数,即【维度1*维度2*...*维度N=元素个数】。
