初入Python数据分析库——Numpy(三)
本篇文章想介绍三个常用的 Numpy函数 给大家。
一、Numpy.arange()
(一)函数说明
numpy.arange(start,stop,step,dtype)
函数作用:生成区间数组。
1.start 起始值(包含),默认为0
2.stop 终止值(不包含)
3.step 步长(空格),默认为1
4.dtype 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型
(二)详细说明
1.start 起始值(包含),默认为0
2.stop 终止值(不包含)
3.step 步长(空格),默认为1
# 示例1:
np.arange(10)
#------------------------
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 示例2:
np.arange(3.1) # 注意,这是浮点型,用法正确
#------------------------
array([0., 1., 2., 3.])
注意1:range(3.1) 是错误的表达!!!
有Python基础的读者看到上面的函数一定会想到 range() 。确实,两者的用法很相似,但是有一点区别,就是 range() 括号里不能有小数出现!!!
注意2:float数值会影响numpy.arange ,这是二进制的运算出现的误差
大家先看看我们下面这段代码。
# 示例3:
np.arange(0.1,0.4,0.1)
#------------------------
array([0.1, 0.2, 0.3, 0.4])
读者从上文可知,step 应该是不包含终止值的,但是这里却出现了。出现的原因就是:浮点型 会转换成 整型 再加减。
# 示例4:
# 起始10,终止值20 步长2
np.arange(10,20,2)
# 起始0,终止值10 步长3
np.arange(0,10,3)
#------------------------
array([10, 12, 14, 16, 18])
array([0, 3, 6, 9])
# 示例4:
np.arange(20,step = 3) # step 不能省略,原因看下方文字部分
#------------------------
array([ 0, 3, 6, 9, 12, 15, 18])
当 arange() 括号里只出现1个数时,默认是:终止值;
当 arange() 括号里只出现2个数时,默认是:起始值+终止值
4.dtype 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型
x = np.arange(5,dtype = float)
print(x)
#------------------------
[0. 1. 2. 3. 4.]
(三)练习
题目描述:200米的主干道插旗,每隔3米插一面旗。
问题描述:1.最后一面旗会插到终点吗?2.一共插多少面旗子?
a=np.arange(0,200,3)
num = len(np.arange(0,200+1,3))-1
print(num+1)
if a[num] == 200:
print('Yes!')
else:
print('No!')
#------------------------
67
No!
简单解释一下,有以下三个点需要注意的。
- 200+1 :step 不包含终止值,我们手动加1
- len(…)-1:-1是因为下方 a[num] 是从 0 开始算起的,索引要 -1
- num+1:上面-1,到了下面从1开始算的时候,就要加回来
二、Numpy.linspace()
(一)函数说明
np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
函数作用:生成等差数列。
1.start 必填项,起始值
2.stop 必填项,终止值(默认包含)
3.num 要生成的等步长的样本数量,默认为50
4.endpoint 如果是True,数列包含stop值,默认情况是True
5.retstep 如果是True,生成的数组中会显示间距,默认情况是True
6.ndarray 的数据类型
(二)详细说明
1.start 必填项,起始值
2.stop 必填项,终止值(默认包含)
3.num 要生成的等步长的样本数量,默认为50
实现原理:(终止值-初始值) / 项数
# 起点1,终点10,数列个数10
a = np.linspace(1,10,10)
a
#------------------------
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
# 实现输出 0 0.5 1 1.5 2 2.5 3 3.5 4
A = np.linspace(0,4,9)
print(A)
B = np.linspace(0,4.1,9)
print(B)
#------------------------
[0. 0.5 1. 1.5 2. 2.5 3. 3.5 4. ]
[0. 0.5125 1.025 1.5375 2.05 2.5625 3.075 3.5875 4.1 ]
ar1 = np.linspace(2.0,3.0,num = 5)
ar1
#------------------------
array([2. , 2.25, 2.5 , 2.75, 3. ])
4.endpoint 如果是True,数列包含stop值,默认情况是True
ar1 = np.linspace(2.0,3.0,num = 5,endpoint = False)
ar2 = np.linspace(2.0,3.0,num = 5)
ar1
ar2
#------------------------
array([2. , 2.2, 2.4, 2.6, 2.8])
array([2. , 2.25, 2.5 , 2.75, 3. ])
5.retstep 如果是True,生成的数组中会显示间距,默认情况是True
ar3 = np.linspace(2.0,3.0,num = 5,retstep = True) # 步长
ar4 = np.linspace(2.0,3.0,num = 5,endpoint = False ,retstep =True)
ar3
ar4
#------------------------
(array([2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
(array([2. , 2.2, 2.4, 2.6, 2.8]), 0.2)
值得注意的是,整一个结果是用元组的形式表现出来的。
三、Numpy.logspace()
lonspace() 函数与 linspace() 函数有很多相似的地方,这里就不再赘述,简单讲讲即可。
(一)函数说明
np.logspace(start,stop,num = 50,endpoint = True,base = 10.0,dtype = None)
函数作用:生成等比数列。
1.start 必填项,起始值
2.stop 必填项,终止值(默认包含)
3.num 要生成的等步长的样本数量,默认为50
4.endpoint 如果是True,数列包含stop值,默认情况是True
5.base 对数 log 的底数.(base的几次方)
6.ndarray 的数据类型
(二)详细说明
a = np.logspace(1,5,3,base = 2)
b = np.logspace(0,9,10,base = 2)
a
b
#------------------------
array([ 2., 8., 32.])
array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.])
这里说明一下 a 这个等比数列。
- 先使用前三个参数,将[1,5]均分为3个数,得到{1,3,5};
- 然后利用第4个参数 base = 2(默认是 10 ),得出结果{2^1 ;2^2 ;2^3}(这里也解释了 base 的含义)