Numpy基础学习与总结

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)
 
[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.]])

    

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]:
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])
原文地址:https://www.cnblogs.com/jackchen-Net/p/6592474.html