您好,登录后才能下订单哦!
本篇内容主要讲解“Numpy数组与列表的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Numpy数组与列表的用法”吧!
今天为大家介绍以下内容:
Ⅰ ndarray数组与列表的相互转化;
Ⅱ ndarray数组的数据类型转化;
Ⅲ 改变ndarray数组的形状;
说白了,就是讲述3个函数。当然,这只是numpy函数中的冰山一角。这里只是介绍在学习numpy过程中,最先遇到的几个函数。
当你学习numpy的时候,我就默认你肯定已经学过Python基础了。对于list列表这个基本数据类型,你肯定不会感到陌生。
那么我们如何实现 “列表” 与 “数组” 之间的相互转化呢?
① 列表转数组:直接将一个列表传入array()函数中
listlist1 = list(range(10)) print(list1) array1 = np.array(list1) print(array1)
结果如下:
② 数组转列表:调用数组的tolist()方法
array2 = np.arange(10) print(array2) list2 = array2.tolist() print(list2)
结果如下:
记住一句话: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字节,通过上面的计10算我们已经知道这个数组开辟的内存为8x,因此元素个数就变成了8x/4-2*x,11 就是说,数组元素变为了原来的2倍。
③ 使用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)
结果如下:
① 使用numpy中的reshape()函数修改数组对象
xx = np.arange(10).reshape(2,5) xxx = np.reshape(xx,(5,2)) print(xxx)
结果如下:
② 使用数组对象的reshape()方法修改数组对象
yy = np.arange(10).reshape(2,5) print(yy)
结果如下:
③ 改变数组形状时,如果维度大于1,可以将“最后一个维度”设置为-1
p = np.arange(6).reshape(2,3) print(p) q = np.arange(6).reshape(2,-1) print(q)
结果如下:
注意:可以这样做的原因在于,当你指明了前面的维度,最后一个维度会根据数组元素个数和前面的维度数,自动计算出最后一个维度的维度数,也就是说【维度一 * 维度二 * … * 维度N = 元素个数】。
到此,相信大家对“Numpy数组与列表的用法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。