1、Numpy介绍

  • 定义:
  • Numpy是一个开源的Python科学计算库,用于快速处理任意维度的数组。
  • Numpy中,存储对象是ndarray。
  • 创建Numpy:
import numpy as np
np.array([])
  • 1.
  • 2.
  • numpy优势
  • 内存块风格–一体式存储
  • 支持并行化运算
  • 效率高于纯python代码—底层使用了c,内部释放了GIL

2、N维数组

  • ndarray的属性
  • ndarray.shape:数组维度的元组
  • ndarray.ndim:数组维度
  • ndarray.size:数组中的元素数量
  • ndarray.itemsize:一个数组元素的长度
  • ndarray.dtype:数组元素的类型
  • ndarray的形状
    np.array()
    三维数组不好理解—excel中有多个sheet
  • ndarray的类型
    bool
    int
    float
    str…
    注意:如果不指定,正说默认为int64,小数默认为float64。

3、Numpy的基本操作

  • 生成数组的方法
  • 生成0和1数组
  • np.ones()
  • np.ones_like()
  • 从现有数组中生成
  • np.array—深拷贝
  • np.asarray–浅拷贝
  • 生成等间隔数组
  • np.linspace(1,100,11) #从1到100,间隔是11;效果如下:
array([  0.,  10.,  20.,  30.,  40.,  50.,  60.,  70.,  80.,  90., 100.])
  • 1.
  • np.arange(10,50,2) #从10到50,间隔是2;效果如下:
array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,
       44, 46, 48])
  • 1.
  • 2.
  • np.logspace(1,3,1) #生成以10的N次幂的数据;效果如下:
array([  10.,  100., 1000.])
  • 1.
  • 生成随机数组
    使用np.random
  • 均匀分布
  • np.random.rand(2,3) #随机生成两行三列的数组,效果如下:
array([[0.35756598, 0.57026639, 0.02924949],
       [0.02111498, 0.72537111, 0.94669752]])
  • 1.
  • 2.
  • np.random.uniform(low=1,high=10,size=([3,5]))#下限是1,上限是10,生成三行五列;效果如下
array([[3.15528825, 1.01357735, 4.72909696, 8.01292636, 4.8997339 ],
       [5.65180884, 4.07661969, 9.52166085, 4.26229383, 3.72778983],
       [8.32872314, 3.17203041, 2.16791937, 3.95843925, 8.59350188]])
  • 1.
  • 2.
  • 3.
  • 正态分布
  • 均值:图形的左右位置
  • 方差:图像是瘦还是胖
    值越小,图形越瘦高,数据越集中
    值越大,图形越矮胖,数据越分散
  • 正态分布创建方式
  • np.random.randn(d0,d1,d2…)
  • np.random.normal(loc=0.0,scale=1.0,size=None);loc代表比概率分布的均值;scale代表次概率分布的标准差;size表示输出的shape,默认为None,只输出一个值。
  • np.random.standard_normal(size=None):返回指定形状的标准正态分布的数组

人工智能机器学习有关-Numpay(三)_Numpay

4、数组索引,切片

先对行进行索引,在进行列索引

高维数组索引,从宏观到微观

  • 代码如下
stock_change = np.random.normal(0,1,(8,10))
array([[-1.44426604, -0.35956676,  0.10022073, -0.37589995,  0.41068841,
         0.35831041, -2.18716918, -0.27044373, -0.60649162,  0.74780256],
       [ 1.50355343,  0.00727481,  0.70220799,  0.11446953,  2.29954941,
        -0.06165946,  0.43377417,  2.66687501,  1.31977339,  0.39484888],
       [ 0.57895097,  0.75483241,  0.46582577, -1.70723503, -0.4722333 ,
         1.36472691,  0.31702275,  0.95247131,  1.13712267, -0.92562661],
       [ 0.42483005, -0.52735992, -1.22389302, -0.70718243, -0.74624277,
        -0.46608281,  2.3002048 ,  0.55910289,  1.27616921, -0.22121508],
       [-0.07102279,  0.23494155,  0.35115159,  0.22186354,  0.85730874,
         0.86016689,  0.42037822, -0.36173826, -1.26004742,  0.22148513],
       [-1.00150606,  0.32304105, -0.64324946, -0.15920028, -0.12329149,
        -0.91909789, -0.70919568,  0.76674683, -1.23383876,  1.57300598],
       [-0.40099816, -0.9621985 , -0.55014995,  0.0815694 ,  1.16744742,
        -0.15184784,  0.08657591, -1.00556795,  0.06046253,  0.1674691 ],
       [ 0.55177698, -1.4687088 , -2.43569035,  1.31883436, -1.06246593,
         0.44006957, -0.8233832 , -1.01700783, -0.98957025,  1.10041451]])

#进行切片
stock_change[0:2, 0:3]  #从0到2两行,从0到3三列
array([[-1.44426604, -0.35956676,  0.10022073],
       [ 1.50355343,  0.00727481,  0.70220799]])
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

5、形状修改

stock_change = np.random.normal(0,1,(4,5))
stock_change
array([[-1.13690825, -0.86626341,  0.26315935, -1.50416658, -0.20551933],
       [-0.62318598,  0.45052168, -1.31538088, -1.05299411,  0.98931701],
       [-0.90524912, -1.27093755,  0.7382356 ,  0.94703348, -0.05833449],
       [-2.33703858,  0.05670275,  1.97424882,  0.09213721,  0.26717848]])
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 对象.reshape:不进行行列互换,产生新变量
stock_change.resize([5,4])
array([[-0.56597865,  1.37304626,  0.88760232,  1.60456417],
       [ 0.42406144,  0.85342625,  0.17185211,  0.63999772],
       [ 0.63243256, -0.14288988,  0.51224131,  0.52807762],
       [-0.25435597,  1.08117107, -1.27219027, -0.96426461],
       [ 0.47159064,  1.19946091,  0.10747391, -0.34872273]])
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 对象.resize:进行行列互换,对原来的值进行修改
stock_change.resize([5,4])#不直接输出结果,改变原来数组的值
stock_change
array([[-0.56597865,  1.37304626,  0.88760232,  1.60456417],
       [ 0.42406144,  0.85342625,  0.17185211,  0.63999772],
       [ 0.63243256, -0.14288988,  0.51224131,  0.52807762],
       [-0.25435597,  1.08117107, -1.27219027, -0.96426461],
       [ 0.47159064,  1.19946091,  0.10747391, -0.34872273]])
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 对象.T:进行行列互换
stock_change.T
array([[-1.13690825, -0.62318598, -0.90524912, -2.33703858],
       [-0.86626341,  0.45052168, -1.27093755,  0.05670275],
       [ 0.26315935, -1.31538088,  0.7382356 ,  1.97424882],
       [-1.50416658, -1.05299411,  0.94703348,  0.09213721],
       [-0.20551933,  0.98931701, -0.05833449,  0.26717848]])
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

6、类型修改

  • 对象.astype(np.int32)#括号里面是你要修改成的数据类型。例如:
stock_change
array([[ 0.70391962, -0.64805071,  1.86832388, -0.99192503, -0.84167201],
       [-1.05297977,  0.29382444, -1.7573821 ,  1.22405082,  1.05422963],
       [ 0.18694931, -0.54332531, -0.48083977,  0.73456394,  0.03539551],
       [ 1.98783588,  0.43443585,  0.61193212, -0.31977936, -1.12256928]])
       
stock_change.astype(np.int32)
array([[ 0,  0,  1,  0,  0],
       [-1,  0, -1,  1,  1],
       [ 0,  0,  0,  0,  0],
       [ 1,  0,  0,  0, -1]])
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 对象.tostring()
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

arr.tostring()
b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\t\x00\x00\x00'
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

7、数组的去重

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


np.unique(arr)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

8、ndarray运算

import numpy as np
stock_change = np.random.normal(0,1,(8,10))
stock_change
array([[ 0.04799655,  0.65765235,  0.42361094,  0.81425383, -0.14889895,
         0.34435302, -0.89120847,  1.09553709, -0.39220518,  0.35681464],
       [-0.1205083 ,  1.04201374, -0.84020323, -0.76451012,  0.38678516,
        -0.48928631, -0.03033363, -0.64034053, -0.31345406,  1.00351474],
       [-1.18944149, -1.21265991, -0.27092964,  0.78723819,  0.86631678,
        -0.41733842, -0.17263459,  0.57000637, -0.90242552,  1.1615763 ],
       [ 0.20939948,  1.0627663 , -1.11295892, -2.20829153, -0.13560078,
         0.04241456,  1.95342178, -1.52867478, -0.4256004 ,  1.89226058],
       [-1.14428267, -1.03230368, -0.64917991,  0.95959798, -0.1140127 ,
        -0.60413769,  0.64979583,  1.96630929, -1.50833397, -0.18793   ],
       [-0.16371276, -0.07527353, -1.07491874, -0.460191  , -0.82218305,
         1.35116945,  0.0615233 , -1.2129384 , -1.21896538,  0.19445662],
       [-2.24073749, -0.4371897 , -0.65786767, -1.20137206, -0.74103418,
         0.03041893,  1.92970227, -1.74572423,  0.04164877,  1.58580713],
       [ 0.04217637, -0.62788208,  0.15461643, -0.38924692, -0.71137869,
         1.86107771,  0.63093733,  0.03397154, -0.02377345,  0.15119872]])
         
stock_c = stock_change[0:5,0:5]
stock_c
array([[ 0.04799655,  0.65765235,  0.42361094,  0.81425383, -0.14889895],
       [-0.1205083 ,  1.04201374, -0.84020323, -0.76451012,  0.38678516],
       [-1.18944149, -1.21265991, -0.27092964,  0.78723819,  0.86631678],
       [ 0.20939948,  1.0627663 , -1.11295892, -2.20829153, -0.13560078],
       [-1.14428267, -1.03230368, -0.64917991,  0.95959798, -0.1140127 ]])
  • 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.
  • 逻辑运算
stock_c>1  
    array([[False, False, False, False, False],
           [False,  True, False, False, False],
           [False, False, False, False, False],
           [False,  True, False, False, False],
           [False, False, False, False, False]])
           
    stock_c[stock_c>1] = 2
    stock_c
    array([[ 0.04799655,  0.65765235,  0.42361094,  0.81425383, -0.14889895],
           [-0.1205083 ,  2.        , -0.84020323, -0.76451012,  0.38678516],
           [-1.18944149, -1.21265991, -0.27092964,  0.78723819,  0.86631678],
           [ 0.20939948,  2.        , -1.11295892, -2.20829153, -0.13560078],
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 通用判断函数
  • np.all():满足所有的要求才返回true
stock_d = stock_change[0:2,0:5]
        stock_d
        array([[ 0.04799655,  0.65765235,  0.42361094,  0.81425383, -0.14889895],
               [-0.1205083 ,  2.        , -0.84020323, -0.76451012,  0.38678516]])
        
        np.all(stock_d>0)  #全部大于0才返回true
        False
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
*   np.any():有一个满足要求就返回true
  • 1.
np.any(stock_d>0) #有一个大于0就返回true
        True
  • 1.
  • 2.
  • 三元运算符
  • np.where()
np.where(stock_d>0,1,0)   #在stock_d中大于0的赋值为1,小于0的赋值为0
array([[1, 1, 1, 1, 0],
       [0, 1, 0, 0, 1]])
  • 1.
  • 2.
  • 3.
  • np.logic_and():并的意思
  • np.logic_or:或的意思
  • 统计运算
  • min:求最小值
  • max:求最大值
  • midian:求中位数
  • mean:均值
  • std:标准差
  • var:方差
  • argmax:最大值下标
  • argmin:最小值下标

9、矩阵乘法

  • np.matmul():矩阵相乘,不支持矩阵与数字相乘
a = np.array([[80, 86],
[82, 80],
[85, 78],
[90, 90],
[86, 82],
[82, 90],
[78, 80],
[92, 94]])

b = np.array([[0.7], [0.3]])
np.matmul(a,b)
array([[81.8],
       [81.4],
       [82.9],
       [90. ],
       [84.8],
       [84.4],
       [78.6],
       [92.6]])
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • np.dot():点乘,支持矩阵与数字相乘
np.dot(a,10)
array([[81.8],
       [81.4],
       [82.9],
       [90. ],
       [84.8],
       [84.4],
       [78.6],
       [92.6]])
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

两者在进行矩阵相乘的时候没有区别