Numpy类型学习
1.数组的表示
import numpy as np In [2]: #numpy核心是高维数组,库中的ndarray支持多维数组,同时提供了数值运算,可对向量矩阵进行运算 In [5]: array1=np.array(range(6)) In [ ]: #array()函数创建一维数组 In [4]: print array1 #如果是python3使用print(array1) [0 1 2 3 4 5] In [6]: #查看数据结构 使用shape关键字 In [8]: array1.shape Out[8]: (6L,) In [13]: array1.shape=2,3 #修改array1变化成二位数组 In [15]: print array1 #输出二维数组 [[0 1 2] [3 4 5]] In [18]: array2=array1.reshape(2,3) #reshape()函数在array1数组的基础上创建一个二维结构数组 In [19]: print array2 [[0 1 2] [3 4 5]] In [20]: array2.shape Out[20]: (2L, 3L) In [ ]: #想改变2行3列的值 In [23]: array2[1,2]=88 In [24]: print array2 [[ 0 1 2] [ 3 4 88]] In [ ]: #利用arange()函数生成数组 In [26]: array4=np.arange(13,1,-1)#1个参数是起始值,2个参数是结束值,第三个参数是步长,结果不包括结束值 In [27]: print array4 [13 12 11 10 9 8 7 6 5 4 3 2] In [29]: array4.shape=2,2,3 In [30]: print array4 [[[13 12 11] [10 9 8]] [[ 7 6 5] [ 4 3 2]]] In [31]: array5=array4.reshape(3,2,2) In [32]: print array5 [[[13 12] [11 10]] [[ 9 8] [ 7 6]] [[ 5 4] [ 3 2]]] In [ ]: arange()#函数创建的数组不包括最后一个值,如果想包括使用linspace()函数 In [33]: array6=np.linspace(1,12,12)#1个参数设置初始值,2个参数设置结束值,3个参数是元素的个数 In [34]: print array6 [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.] In [38]: print np.linspace(1,12,12) [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.] In [39]: array6.dtype #dtype函数查看数值元素数值类型 Out[39]: dtype('float64') In [ ]: #linspace()函数生成数组默认是浮点类型, #如果想创建整形数组,则增加dtype参数 In [44]: array7=np.linspace(1,12,12,dtype=int) In [45]: print array7 [ 1 2 3 4 5 6 7 8 9 10 11 12] In [46]: array7.dtype Out[46]: dtype('int32') In [ ]: #a=np.zeros()#zeros()生成全为0的数组 In [ ]: #b=np.ones()##ones()生成全为1的数组 In [ ]: #c=np.empty()##empty()生成给定维度无初始值数组 In [40]: a=np.zeros((4,5)) In [41]: print a [[ 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0.]] In [42]: b=np.ones((4,5)) In [43]: print b [[ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.]] In [48]: a.dtype Out[48]: dtype('float64') In [49]: b.dtype Out[49]: dtype('float64') In [51]: np.ones((2,5,4),dtype=np.int16) Out[51]: array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]], dtype=int16) In [52]: np.empty((3,2)) Out[52]: array([[ 0., 0.], [ 0., 0.], [ 0., 0.]])
ipynb代码参考如下
In [1]:
import numpy as np
In [2]:
#numpy核心是高维数组,库中的ndarray支持多维数组,同时提供了数值运算,可对向量矩阵进行运算
In [5]:
array1=np.array(range(6))
In [ ]:
#array()函数创建一维数组
In [4]:
print array1 #如果是python3使用print(array1)
In [6]:
#查看数据结构 使用shape关键字
In [8]:
array1.shape
Out[8]:
In [13]:
array1.shape=2,3 #修改array1变化成二位数组
In [15]:
print array1 #输出二维数组
In [18]:
array2=array1.reshape(2,3) #reshape()函数在array1数组的基础上创建一个二维结构数组
In [19]:
print array2
In [20]:
array2.shape
Out[20]:
In [ ]:
#想改变2行3列的值
In [23]:
array2[1,2]=88
In [24]:
print array2
In [ ]:
#利用arange()函数生成数组
In [26]:
array4=np.arange(13,1,-1)#1个参数是起始值,2个参数是结束值,第三个参数是步长,结果不包括结束值
In [27]:
print array4
In [29]:
array4.shape=2,2,3
In [30]:
print array4
In [31]:
array5=array4.reshape(3,2,2)
In [32]:
print array5
In [ ]:
arange()#函数创建的数组不包括最后一个值,如果想包括使用linspace()函数
In [33]:
array6=np.linspace(1,12,12)#1个参数设置初始值,2个参数设置结束值,3个参数是元素的个数
In [34]:
print array6
In [38]:
print np.linspace(1,12,12)
In [39]:
array6.dtype #dtype函数查看数值元素数值类型
Out[39]:
In [ ]:
#linspace()函数生成数组默认是浮点类型,
#如果想创建整形数组,则增加dtype参数
In [44]:
array7=np.linspace(1,12,12,dtype=int)
In [45]:
print array7
In [46]:
array7.dtype
Out[46]:
In [ ]:
#a=np.zeros()#zeros()生成全为0的数组
In [ ]:
#b=np.ones()##ones()生成全为1的数组
In [ ]:
#c=np.empty()##empty()生成给定维度无初始值数组
In [40]:
a=np.zeros((4,5))
In [41]:
print a
In [42]:
b=np.ones((4,5))
In [43]:
print b
In [48]:
a.dtype
Out[48]:
In [49]:
b.dtype
Out[49]:
In [51]:
np.ones((2,5,4),dtype=np.int16)
Out[51]:
In [52]:
np.empty((3,2))
Out[52]:
2.Numpy数组元素的基本操作
#数组元素的索引和切片 In [2]: import numpy as np In [4]: #array[start:end:step],返回值是索引值为start到end-1之间 #并且索引值与start之差可以被step整除的连续对象 In [ ]: #如果想提取一个元素,只有start的值,array[start] In [3]: a1=np.linspace(1,26,6,dtype=int) In [5]: a1 Out[5]: array([ 1, 6, 11, 16, 21, 26]) In [6]: a1[3]#提取a1中第4个元素 Out[6]: 16 In [8]: a1[1:3]#提取a1中连续几个元素,不包括end位置值,这里指的是16 Out[8]: array([ 6, 11]) In [9]: a1[:5]#从起点开始不包括结尾的值取出来 Out[9]: array([ 1, 6, 11, 16, 21]) In [10]: a1[2:]#从指定位置2开始的所有元素的值取出来 Out[10]: array([11, 16, 21, 26]) In [12]: a1[-1]#取出最后一个元素的值 Out[12]: 26 In [13]: a1[3]#取出下标为3,即第4个元素的值 Out[13]: 16 In [14]: a1[:-1]#取出元素为负数的时候,表示从右往左向上取元素 Out[14]: array([ 1, 6, 11, 16, 21]) In [15]: a1[2:-1]#从2开始到最后一个数,但不包括最后一个数 Out[15]: array([11, 16, 21]) In [16]: a2= a1[0:3:1]#0表示索引,3表示结束索引,1表示步长 In [17]: a2 Out[17]: array([ 1, 6, 11]) In [18]: a1[0]=20 In [19]: a2[0] #更改a1的值,a2的值会发生相应改变,也就是说按切片取值赋值变量会发生改变 Out[19]: 20 In [20]: a1[[0,1,4]]#取出索引位置为0,1,4位置上的元素 Out[20]: array([20, 6, 21]) In [21]: a3=a1[[0,1,4]] In [22]: a3 Out[22]: array([20, 6, 21]) In [23]: a1[0]=90 In [25]: a3#更改a1的值a3不会发生改变,也就是按索引取值是不会改变赋值变量的值 Out[25]: array([20, 6, 21]) In [26]: ##针对二维数组的切片或索引取值 In [27]: na1=np.array(np.arange(24),dtype=int).reshape(4,6)#arange函数生成数组 In [29]: print na1 [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23]] In [30]: na1.dtype Out[30]: dtype('int32') In [31]: #在第0行上,取索引值为0,1的元素,共两行 In [ ]: #在第1行上,取索引值为1,2,3,4,5的元素,共56列 In [32]: na1[:2,1:] Out[32]: array([[ 1, 2, 3, 4, 5], [ 7, 8, 9, 10, 11]]) In [33]: #在第0轴上取出索引值为[2,3] In [ ]: #在第1轴上取索引值为[2,4] #na1[2,2],na1[3,4] In [36]: na1[[2,3],[3,4]] Out[36]: array([15, 22]) In [ ]: #在第0轴上取出索引值为一个范围 In [ ]: #在第1轴上取出索引值数组 In [37]: na2=na1.reshape(2,3,4) In [38]: na2 Out[38]: array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]) In [39]: na2[(1,2,3)]1,2,3 #分别表示3个维度(维度计数均从0开始),2行3列1维 Out[39]: 23 In [43]: na2[1,2,3] Out[43]: 23 In [44]: #整形列表作为索引情况。如果提取三个维度的多个值,则可以在每一轴上分别定义一 #一个整形数组或者整形列表作为索引值,但是要保证各个维度上面的长度相等 In [ ]: #在0轴上索引为[1,1,0] In [ ]: #在1轴上索引为[0,1,0] In [ ]: #在2轴上索引为[2,3,0] In [45]: na2 Out[45]: array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]) In [46]: na2[[1,1,0],[0,1,0],[2,3,1]]#按照对应x,y,z查看(1,0,2)=14.(1,1,3)=19,(0,0,1)=1 Out[46]: array([14, 19, 1])
ipynb代码
#数组元素的索引和切片
In [2]:
import numpy as np
In [4]:
#array[start:end:step],返回值是索引值为start到end-1之间
#并且索引值与start之差可以被step整除的连续对象
In [ ]:
#如果想提取一个元素,只有start的值,array[start]
In [3]:
a1=np.linspace(1,26,6,dtype=int)
In [5]:
a1
Out[5]:
In [6]:
a1[3]#提取a1中第4个元素
Out[6]:
In [8]:
a1[1:3]#提取a1中连续几个元素,不包括end位置值,这里指的是16
Out[8]:
In [9]:
a1[:5]#从起点开始不包括结尾的值取出来
Out[9]:
In [10]:
a1[2:]#从指定位置2开始的所有元素的值取出来
Out[10]:
In [12]:
a1[-1]#取出最后一个元素的值
Out[12]:
In [13]:
a1[3]#取出下标为3,即第4个元素的值
Out[13]:
In [14]:
a1[:-1]#取出元素为负数的时候,表示从右往左向上取元素
Out[14]:
In [15]:
a1[2:-1]#从2开始到最后一个数,但不包括最后一个数
Out[15]:
In [16]:
a2= a1[0:3:1]#0表示索引,3表示结束索引,1表示步长
In [17]:
a2
Out[17]:
In [18]:
a1[0]=20
In [19]:
a2[0] #更改a1的值,a2的值会发生相应改变,也就是说按切片取值赋值变量会发生改变
Out[19]:
In [20]:
a1[[0,1,4]]#取出索引位置为0,1,4位置上的元素
Out[20]:
In [21]:
a3=a1[[0,1,4]]
In [22]:
a3
Out[22]:
In [23]:
a1[0]=90
In [25]:
a3#更改a1的值a3不会发生改变,也就是按索引取值是不会改变赋值变量的值
Out[25]:
In [26]:
##针对二维数组的切片或索引取值
In [27]:
na1=np.array(np.arange(24),dtype=int).reshape(4,6)#arange函数生成数组
In [29]:
print na1
In [30]:
na1.dtype
Out[30]:
In [31]:
#在第0行上,取索引值为0,1的元素,共两行
In [ ]:
#在第1行上,取索引值为1,2,3,4,5的元素,共56列
In [32]:
na1[:2,1:]
Out[32]:
In [33]:
#在第0轴上取出索引值为[2,3]
In [ ]:
#在第1轴上取索引值为[2,4]
#na1[2,2],na1[3,4]
In [36]:
na1[[2,3],[3,4]]
Out[36]:
In [ ]:
#在第0轴上取出索引值为一个范围
In [ ]:
#在第1轴上取出索引值数组
In [37]:
na2=na1.reshape(2,3,4)
In [38]:
na2
Out[38]:
In [39]:
na2[(1,2,3)]1,2,3 #分别表示3个维度(维度计数均从0开始),2行3列1维
Out[39]:
In [43]:
na2[1,2,3]
Out[43]:
In [44]:
#整形列表作为索引情况。如果提取三个维度的多个值,则可以在每一轴上分别定义一
#一个整形数组或者整形列表作为索引值,但是要保证各个维度上面的长度相等
In [ ]:
#在0轴上索引为[1,1,0]
In [ ]:
#在1轴上索引为[0,1,0]
In [ ]:
#在2轴上索引为[2,3,0]
In [45]:
na2
Out[45]:
In [46]:
na2[[1,1,0],[0,1,0],[2,3,1]]#按照对应x,y,z查看(1,0,2)=14.(1,1,3)=19,(0,0,1)=1
Out[46]: