pyhton numpy库的学习

1.Numpy核心数据结构:ndarray

ndarray是由同一种类型的元素组成的N维数组

1.1 ndarray的创建

主要有以下几个函数进行创建:

array()

zeros():全零数组

ones():全1数组

empty():创建未初始化的数组

1.1.1通过array()创建

(1)一维 a = np.array([1,2,3,4])

(2)二维 

b = np.array([
     [1,2,3,4],
     [5,6,7,8]
])

(3)三维

c = np.array([
  [
    [1,2,3,4],
    [5,6,7,8]
  ],
  [
    [9,10,11,12],
    [13,14,15,16]
  ]
])

1.1.2通过zeros()  ones()  empty()创建

  a = zeros((3,2))

array([[0., 0.],
       [0., 0.],
       [0., 0.]])

  b = ones((3,2))

array([[1., 1.],
       [1., 1.],
       [1., 1.]])

c = np.empty((2,3,4))
array([[[ 7.15526851e-312,  6.22522714e-322,  2.12199579e-312,
         -1.68416096e-310],
        [ 7.15570007e-312, -4.47213389e-313,  7.15541423e-312,
          8.20148972e-322],
        [ 0.00000000e+000, -1.73848404e-310,  7.15568433e-312,
         -4.47204282e-313]],

       [[ 7.15526851e-312,  6.66988622e-322,  2.12199579e-312,
         -1.79280714e-310],
        [ 0.00000000e+000,  4.47214284e-313,  7.15542855e-312,
          8.25089629e-322],
        [ 0.00000000e+000, -1.84713021e-310,  0.00000000e+000,
         -4.47219864e-313]]])
1.1.3其他创建方式
(1)arange函数 区间,左闭右开
  np.arange(20) #只写一个参数,默认起始值为0,步长为1
  array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,17, 18, 19])

  np.arange(10,20)  #写两个参数,起始值和终止值,默认步长为1
    array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])

   np.arange(10,20,2) #写两个参数,起始值和终止值,步长
    array([10, 12, 14, 16, 18])
(2)linspace函数  区间,全闭,参数:起始值、终止值、元素个数

  np.linspace(0,10,5)
    array([ 0. ,  2.5,  5. ,  7.5, 10. ])

(3)logspace函数  起始值以10为底,n次方,元素个数
  np.logspace(0,2,5)   #n为0到2的等比数列
  array([1., 3.16227766, 10.,31.6227766 ,100.])
(4)随机数random()
  np.random.random()
1.2 ndarray属性

1.3 ndarray修改形状
a = np.arange(0,20,2)
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])
a.reshape(2,-1) #修改数组形状,未知行数或列数使用-1表示
array([[ 0,  2,  4,  6,  8],
       [10, 12, 14, 16, 18]])

1.4 数组的乘法和矩阵的乘法
 对应元素相乘:arr1 * arr2


矩阵的乘法(点积、数量积):
arr1.dot(arr2) 或者 np.dot(arr1,arr2)

1. 5 索引

 1.5.1 多维数组的索引

a = np.array([
    [
        [1,2,3,4],
        [5,6,7,8]
    ],
    [
        [9,10,11,12],
        [13,14,15,16]
    ],
    [
        [8,5,6,2],
        [4,3,2,1]
    ]
])
a[1,1,3] #16
a[1][1][3] #16
a[1:2]
array([[[ 9, 10, 11, 12],
        [13, 14, 15, 16]]])
a[1,1:3,1] #array([14])

1.5.2 布尔类型索引

利用布尔类型的数组进行据索引,最终返回结果是对应索引数组中数据为True位置的值。

 

 

1.5.3 花式索引

利用整数数组进行索引

arr = np.arange(32).reshape(8,4)
arr
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],
       [24, 25, 26, 27],
       [28, 29, 30, 31]])

#获取第(0,0)、(3,3)、(5,2)这三个索引位置的数据
print(arr[[0,3,5],[0,3,2]])
[ 0 15 22]

#获取第0、3、5行的第0、3、2列数据
arr[np.ix_([0,3,5],[0,3,2])]
array([[ 0,  3,  2],
       [12, 15, 14],
       [20, 23, 22]])

 

1.6 数组转置 transpose()或T属性

1.7 ndarray常用函数

1.7.1聚合函数:mean max min std

 

1.7.2 np.where函数

where的三个参数,第一个是判断条件,第二个是为真时取值,第三是为假时取值

xarr = np.array([1,2,3,4,5])
yarr = np.array([-1,-2,8,9,10])
condition = xarr > yarr
result  = np.where(condition,xarr,yarr)
result
array([ 1,  2,  8,  9, 10])

 

arr = np.array([
    [1,2,np.NaN,4],
    [4,5,6,np.NaN],
    [7,8,9,np.inf],
    [np.inf,np.e,np.pi,4]
])
condition = np.isnan(arr) | np.isinf(arr)
result = np.where(condition,0,arr)
result
array([[1.        , 2.        , 0.        , 4.        ],
       [4.        , 5.        , 6.        , 0.        ],
       [7.        , 8.        , 9.        , 0.        ],
       [0.        , 2.71828183, 3.14159265, 4.        ]])

  

1.7.3 np.unique函数,去重

arr = np.array(['a','f','c','d','e','a','b'])
for a in arr:
   print(a,end=" ")
a b c d e a b 

arr2 = np.unique(arr)
for a in arr2:
    print(a,end=" ")
a b c d e f 

 





 

 

 




 
posted @ 2018-06-09 10:41  weiququ  阅读(279)  评论(0编辑  收藏  举报