zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    121.买卖股票 求最大收益1 Best Time to Buy and Sell Stock
    409.求最长回文串的长度 LongestPalindrome
    202.快乐数 Happy Number
    459.(KMP)求字符串是否由模式重复构成 Repeated Substring Pattern
    326.是否为3的平方根 IsPowerOfThree
    231.是否为2的平方根 IsPowerOfTwo
    461.求两个数字转成二进制后的“汉明距离” Hamming Distance
    206.反转单链表 Reverse Linked List
    448. 数组中缺少的元素 Find All Numbers Disappeared in an Array
    常见表单元素处理
  • 原文地址:https://www.cnblogs.com/danvy/p/12854586.html
Copyright © 2011-2022 走看看