• Python: numpy模块


    numpy 模块
    内容基于jupyter notebook而来,In [*]以下内容为代码,Out[*]为输出结果;
    由于执行顺序不一样,可能会有些数据上下文衔接不上,重点是使用方法。
    • NumPy(Numerical Python) 是 Python 语言中做科学计算的基础库。重在于数值计算,也是大部分Python科学计算库的基础,多用于在大型、多维数组上执行的数值运算。
    In [3]:
    import numpy as np
    # 使用array()来创建一个一维数组
    arr = np.array([1,2,3,4,5])
    arr
    Out[3]:
    array([1, 2, 3, 4, 5])
    In [6]:
    # 使用array()来创建一个多维数组
    np.array([[1,2,3,4,5],[6,7,8,9,10]])
    Out[6]:
    array([[ 1, 2, 3, 4, 5],
    [ 6, 7, 8, 9, 10]])

    数组中存储的数据元素类型必须是统一类型

    优先级:字符串 > 浮点型 > 整数
    In [7]:
    np.array([[1,2,3],[4.1,5,6]])
    Out[7]:
    array([[1. , 2. , 3. ],
    [4.1, 5. , 6. ]])

    用numpy的routines函数来创建数组:zeros(),ones(),linespace(),arange(),random

    In [35]:
    np.zeros(5)
    Out[35]:
    array([0., 0., 0., 0., 0.])
    In [36]:
    np.ones(shape=(2,3))
    Out[36]:
    array([[1., 1., 1.],
    [1., 1., 1.]])
    In [38]:
    np.linspace(0,20,num=4)
    Out[38]:
    array([ 0. , 6.66666667, 13.33333333, 20. ])
    In [39]:
    np.arange(0,20,step=2)
    Out[39]:
    array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
    In [42]:
    # 随机
    np.random.randint(0,20,size=(2,3))
    Out[42]:
    array([[ 7, 19, 17],
    [ 8, 3, 14]])
    In [46]:
    # 固定随机性
    # np.random.seed()的作用: 当设置相同的seed时,每次生成的随机数也相同,如果不设置seed,则每次生成的随机数都会不一样
    np.random.seed(23)
    np.random.randint(0,20,size=(2,3))
    Out[46]:
    array([[19, 6, 8],
    [ 9, 8, 13]])
    In [47]:
    arr.shape # 形状
    Out[47]:
    (2, 5)
    In [48]:
    arr.ndim #维度
    Out[48]:
    2
    In [49]:
    arr.size # 返回元素个数
    Out[49]:
    10
    In [53]:
    type(arr)
    Out[53]:
    numpy.ndarray
    In [50]:
    arr.dtype # 数组元素类型
    Out[50]:
    dtype('int32')

    array(dtype=?):可以设定数据类型

    arr.dtype = '?':可以修改数据类型
    In [35]:
    np.zeros(5)
    Out[35]:
    array([0., 0., 0., 0., 0.])
    In [36]:
    np.ones(shape=(2,3))
    Out[36]:
    array([[1., 1., 1.],
    [1., 1., 1.]])
    In [38]:
    np.linspace(0,20,num=4)
    Out[38]:
    array([ 0. , 6.66666667, 13.33333333, 20. ])
    In [39]:
    np.arange(0,20,step=2)
    Out[39]:
    array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
    In [42]:
    # 随机
    np.random.randint(0,20,size=(2,3))
    Out[42]:
    array([[ 7, 19, 17],
    [ 8, 3, 14]])
    In [46]:
    # 固定随机性
    # np.random.seed()的作用: 当设置相同的seed时,每次生成的随机数也相同,如果不设置seed,则每次生成的随机数都会不一样
    np.random.seed(23)
    np.random.randint(0,20,size=(2,3))
    Out[46]:
    array([[19, 6, 8],
    [ 9, 8, 13]])
    In [47]:
    arr.shape # 形状
    Out[47]:
    (2, 5)
    In [48]:
    arr.ndim #维度
    Out[48]:
    2
    In [49]:
    arr.size # 返回元素个数
    Out[49]:
    10
    In [53]:
    type(arr)
    Out[53]:
    numpy.ndarray
    In [50]:
    arr.dtype # 数组元素类型
    Out[50]:
    dtype('int32')

    常用的统计函数

    numpy.amin() 和 numpy.amax(),用于计算数组中的元素沿指定轴的最小、最大值。
    numpy.ptp():计算数组中元素最大值与最小值的差(最大值 - 最小值)。
    numpy.median() 函数用于计算数组 a 中元素的中位数(中值)
    标准差std():标准差是一组数据平均值分散程度的一种度量。
    公式:std = sqrt(mean((x - x.mean())**2))
    如果数组是 [1,2,3,4],则其平均值为 2.5。 因此,差的平方是 [2.25,0.25,0.25,2.25],并且其平均值的平方根除以 4,即 sqrt(5/4) ,结果为 1.1180339887498949。
    方差var():统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean((x - x.mean())** 2)。换句话说,标准差是方差的平方根。
    In [101]:
    a = np.array([22,33,22,34,41,45])
    np.amin(a)
    Out[101]:
    22
    In [102]:
    np.amax(a)
    Out[102]:
    45
    In [104]:
    np.ptp(a)
    Out[104]:
    23
    In [106]:
    a = np.array([1,2,3,4])
    a.std()
    Out[106]:
    1.118033988749895
    In [107]:
    a.var()
    Out[107]:
    1.25

    矩阵相乘

    numpy.dot(a, b, out=None)
    a : ndarray 数组
    b : ndarray 数组
    第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3。也就是说,结果矩阵第m行与第n列交叉位置的那个值,等于第一个矩阵第m行与第二个矩阵第n列,对应位置的每个值的乘积之和。
    a1 = np.array([[2,1],[4,3]])
    a2 = np.array([[1,2],[1,0]])
    np.dot(a1,a2)
    Out[108]:
    array([[3, 4],
    [7, 8]])

    将外部的一张图片读取加载到numpy数组中

    import matplotlib.pyplot as plt
    # 将图片数据进行读取,返回的是一个三维数组, 需安装pillow组件
    img_arr = plt.imread('./hold.jpg')
     
    # 讲数组中的数据进行图像显示
    plt.imshow(img_arr)

    # 将数组中的每一个数组元素都减去100
    plt.imshow(img_arr-100)

    # 将图片进行左右翻转
    plt.imshow(img_arr[:,::-1,:])

    # 将图片上下翻转
    plt.imshow(img_arr[::-1,:,:])
    Out[15]:
    <matplotlib.image.AxesImage at 0x2056545a8b0>

    # 将图片中“心”字裁剪出来
    plt.imshow(img_arr[260:360,250:480,:]) # 裁剪时,第一个对应y轴,第二个对应x轴,

    # 实现图片的九宫格
    arr_3 = np.concatenate((img_arr,img_arr,img_arr),axis=1) # axis=1 表示行
    arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0) # axis=0 表示列
    plt.imshow(arr_9)

     
    参考:bilibili.com/video/BV1tE411F7do(P34~35)
  • 相关阅读:
    iOS Icon尺寸、iPhone Ratina 分辨率
    Xcode常用设置
    Objective-C中的数据类型、常量、变量、运算符与表达式
    格式化输出
    Objective-C程序结构及语法特点
    构造数据类型、枚举类型
    数组、字符串
    冒泡排序
    常量、变量
    函数
  • 原文地址:https://www.cnblogs.com/danvy/p/12854586.html
Copyright © 2020-2023  润新知