numpy简单入门
Posted hardykay
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了numpy简单入门相关的知识,希望对你有一定的参考价值。
numpy数以数组为对象,将各种数据转化成数组,因此,我们学习的也就是数组了,实际上它被称之为 ndarrays。
创建一个数组:
import numpy as np my_array = np.array([1, 2, 3, 4, 5]) print(my_array) print(my_array.shape)
创建全部为0 的数组:
import numpy as np my_zeros_array = np.zeros(5) print(my_zeros_array)
创建数组:
import numpy as np # 用列表生成数组 a = np.array([0, 1, 2, 3, 4]) # 用元组生成数组 b = np.array((0, 1, 2, 3, 4, 5)) # 产生0到4的整数数组,包头不包尾 c = np.arange(5) # 产生0到2*np.pi的等差数列,并且一共五个,可以得出差值为2*np.pi/(5-1) = 1.5707963267948966 d = np.linspace(0, 2*np.pi, 5) print(a) print(b) print(c) print(d)
多维数组:
import numpy as np # MD Array, a = np.array([[11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28 ,29, 30], [31, 32, 33, 34, 35]]) # 以0作为数组的下标 print(a[0, 0]) # 可以使用负数倒数去取值 print(a[-1, -1]) # 数组切片是包头不包尾 print(a[2, 1:4]) # 对比一下这个跟原生的python规则一致 d = [1, 2, 3, 4, 5] print(d[1:4])
数组的属性:
import numpy as np # Array properties, a = np.array([[11, 23, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 35]]) # <class ‘numpy.ndarray‘> print(type(a)) # object 这个不准确,有时候是int32 有时候是int64 还有的是其他float,string等这个是根据这个数组的值决定 print(a.dtype) # int32 # 1、如果里面的额数值都是int并且值不大于-2^31 ~ 2^31-1次方=4294967295,由于则显示为int32 # 来感受一下吧 # int32 a = np.array([[11, 23, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 2147483647]]) print(a.dtype) # int64 a = np.array([[11, 23, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 2147483648]]) print(a.dtype) # 那么,64的极限在哪里?你可能想到了,就是-2^63 ~ 2^63-1 a = np.array([[11, 23, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 2**63-1]]) print(a.dtype) # 比int还要大一点呢?那就是float64了 a = np.array([[11, 23, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 2**63]]) print(a.dtype) # 比float大一点点呢?那就是object了 a = np.array([[11, 23, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25], [26, 27, 28, 29, 30], [31, 32, 33, 34, 2**64]]) print(a.dtype)
在这里我要强行解释一波,哪里不对的地方请各位道友多多指出
1、为什么int32是用2^32次方的算数呢?因为计算机中都是由0或1组成的数据,也就是两种情况(2就被推出来送命啦),而32是表示32位的意思,那“位”又是什么?位是计算机的最小存储单元(也就是存放0或1 的那个单元,你可以理解成牢房),8位为一个字节,因此int32又称4个字节。字节是计算机中的最小单位。
那为什么是-2^31~2^31-1这个范围呢?而不是0~2^32-1这个范围呢?你的理解非常正确,无符号整型就是这个范围,那就好理解了,因为有正负号,所以就是-2^31~2^31-1。
还有,为什么是-2^31~2^31-1而不是-2^31~2^31呢?都说对半分嘛,怎么正数反而要减去一个1呢?没错,你的怀疑不无道理,可以这样就有一个棘手的问题,1可以表示位00000000 00000000 0000000 00000001 ,而-1可以表示为 10000000 00000000 00000000 00000001,那么0呢?当然,0有两种情况-0和0,你可能很疑惑,怎么有-0呢?没办法还真的有。因此-0和0占去一位都是0,所以就需要负数或者正数减去一个1。int64也一样。
2、我也有个疑问,为什么float取值范围要比int64还要大?因为他们都是64位存储对吧?而且float类型还要用一位来记录小数点,没错吧!
我也是想当然,不过如果我们学过C或者更加底层的汇编,你就会发现,浮点的存储跟整型不一样,他是可能损失精度的,比如1000000 整型就傻傻的将所有1000000
先不聊了,老板发现我闲着没事干,又安排新活了。
以上是关于numpy简单入门的主要内容,如果未能解决你的问题,请参考以下文章