文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

这3个函数,是你学习Numpy的基础!

2024-12-03 05:01

关注

说白了,就是讲述3个函数。当然,这只是numpy函数中的冰山一角。这里只是介绍在学习numpy过程中,最先遇到的几个函数。

2. ndarray数组与列表的相互转化

当你学习numpy的时候,我就默认你肯定已经学过Python基础了。对于list列表这个基本数据类型,你肯定不会感到陌生。

那么我们如何实现 “列表” 与 “数组” 之间的相互转化呢?

① 列表转数组:直接将一个列表传入array()函数中 

  1. listlist1 = list(range(10))  
  2. print(list1)  
  3. array1 = np.array(list1)  
  4. print(array1) 

结果如下:

② 数组转列表:调用数组的tolist()方法 

  1. array2 = np.arange(10)  
  2. print(array2)  
  3. list2 = array2.tolist()  
  4. print(list2) 

结果如下:

3. ndarray数组的数据类型转化

记住一句话: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原地修改数组的数据类型,会出现什么问题? 

  1. x = np.array([1.2,3.4,5.6],dtype=np.float64)  
  2. print(x)  
  3. print(x.dtype)  
  4. print(x.nbytes)  
  5. # --------------------------------------------  
  6. x.dtype="float32"  
  7. print(x)  
  8. print(x.nbytes)  
  9. # --------------------------------------------  
  10. x.dtype="float16" 
  11. print(x)  
  12. print(x.nbytes) 

结果如下:

为什么会出现上述现象?

通过上面的测试发现,当我们使用"dtype"修改数组的数据类型的时候,比特位(也就是一个"二进制位”)每压缩为原来的二分之一,数组中的元素个数就会变为原来的两倍。

这是为什么呢?

数组一旦创建,它的数据类型也就定了,也就相当于开辟了一块内存,用于存储这个数组了,下面用一个公式形象说明上述现象的原因。

假设某个数组有x个元素,采用的数据类型是int64,这个数据类型占用的内存大小为8字节,因而整个数组占用的内存大小为8*x。

当数据类型变为int32的时候,数组中数据类型就变成了4字节,通过上面的计10算我们已经知道这个数组开辟的内存为8x,因此元素个数就变成了8x/4-2*x,11 就是说,数组元素变为了原来的2倍。

③ 使用astype()函数修改数组的数据类型:相当于新创建了一个数组 

  1. z = np.array([1.5,3.7,4.8])  
  2. print(z)  
  3. print(z.dtype)  
  4. zzz = z.astype(np.float32) 
  5. print(zz)  
  6. print(zz.dtype) 

结果如下:

4. 改变ndarray数组的形状

① 使用numpy中的reshape()函数修改数组对象 

  1. xx = np.arange(10).reshape(2,5)  
  2. xxx = np.reshape(xx,(5,2))  
  3. print(xxx) 

结果如下:

② 使用数组对象的reshape()方法修改数组对象 

  1. yy = np.arange(10).reshape(2,5)  
  2. print(yy) 

结果如下:

③ 改变数组形状时,如果维度大于1,可以将“最后一个维度”设置为-1 

  1. p = np.arange(6).reshape(2,3)  
  2. print(p)  
  3. q = np.arange(6).reshape(2,-1)  
  4. print(q) 

结果如下:

注意:可以这样做的原因在于,当你指明了前面的维度,最后一个维度会根据数组元素个数和前面的维度数,自动计算出最后一个维度的维度数,也就是说【维度一 * 维度二 * … * 维度N = 元素个数】。 

 

来源:Python中文社区 (ID:python-china)内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯