zoukankan      html  css  js  c++  java
  • 【0825 | Day 22】Numpy模块

    Numpy模块

    一、Numpy库的作用

    1. 区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型

    2. 计算速度快,甚至要由于python内置的简单运算,使得其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似。

    二、为什么用Numpy

    lis1 = [1, 2, 3]  # 向量
    lis2 = [4, 5, 6]  # 向量
    
    # 要得出[4,10,18]的过程有些复杂
    
    lis = []
    for i in range(len(lis1)):
        lis.append(lis1[i] * lis2[i])
    print(lis)
    
    #[4,10,18]
    

    三、创建Numpy数组

    numpy数组即numpy的ndarray对象,创建numpy数组就是把一个列表传入np.array()方法。

    #解决以上问题
    
    import numpy as np
    
    arr1 = np.array([1,2,3])
    arr2 = np.array([4,5,6])
    print(arr1*arr2)
    
    # [ 4 10 18]
    
    # numpy数组
    arr = np.array([1, 2, 3])
    print(arr)  # 一维的numpy数组
    
    arr2 = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr2)  # 二维的numpy数组(一般就是二维)
    
    arr3 = np.array([[[1, 2, 3], [4, 5, 6]],[[1, 2, 3], [4, 5, 6]],[[1, 2, 3], [4, 5, 6]]])
    print(arr3)
    
    # 三维的不使用numpy模块,使用tensorflow/pytorch模块
    

    四、Numpy数组常用属性

    # 属性(可以记)
    
    '''
    
    T	数组的转置(对高维数组而言)
    dtype	数组元素的数据类型
    size	数组元素的个数
    ndim	数组的维数
    shape	数组的维度大小(以元组形式)
    astype	类型转换
    
    '''
    
    arr2 = np.array([[1, 2, 3], [4, 5, 6]])
    
    print(arr2)  # 二维的numpy数组(一般就是二维)
    #[[1 2 3]
    # [4 5 6]]
        
    print(arr2.T)  # 行与列互换
    print(arr2.transpose()) # 行与列互换
    #[[1 4]
    # [2 5]
    # [3 6]]
    
    print(arr2.dtype)  # python中的数据类型
    #int32
    
    print(arr2.astype(np.float64).dtype)
    #float64
    
    print(arr2.size)
    #6
    
    print(arr2.shape)
    #(2, 3)
    
    print(arr2.ndim)
    #2
    
    #切片
    
    arr2 = np.array([[1, 2, 3], [4, 5, 6]])
    
    print(arr2)  # 二维的numpy数组(一般就是二维)
    #[[1 2 3]
    # [4 5 6]]
    
    print(arr2[:, :])
    #[[1 2 3]
    # [4 5 6]]
    
    print(arr2[0:1, :])
    #[[1 2 3]]
    
    print(arr2[0:1, 0:1])
    #[[1]]
    
    print(arr2[0, :])
    #[1 2 3]
    
    print(arr2[0, 0],type(arr2[0, 0]))
    #1 <class 'numpy.int32'>
    
    print(arr2[0, [0,2]])
    #[1 3]
    
    print(arr2[0, 0] + 1)
    #2
    
    # 修改值
    
    lis = [1,2,3]
    lis[0] = 2
    print(lis)
    #[2, 2, 3]
    
    arr2 = np.array([[1, 2, 3], [4, 5, 6]])  # 可变数据类型
    print(arr2)  # 二维的numpy数组(一般就是二维)
    #[[1 2 3]
    # [4 5 6]]
    
    arr2[0, :] = 0
    print(arr2)
    #[[0 0 0]
    # [4 5 6]]
    
    arr2[1, 1] = 1
    print(arr2)
    #[[0 0 0]
    # [4 1 6]]
    
    arr2[arr2 < 3] = 3  # 布尔取值
    print(arr2)
    #[[3 3 3]
    # [4 3 6]]
    
    #合并
    
    arr1 = np.array([[1, 2, 3], [4, 5, 6]])  # 可变数据类型
    print(arr1)
    #[[1 2 3]
    # [4 5 6]]
    
    arr2 = np.array([[7, 8, 9], [10, 11, 12]])  # 可变数据类型
    print(arr2)
    #[[ 7  8  9]
    # [10 11 12]]
    
    print(np.hstack((arr1,arr2)))  # 行合并
    #[[ 1  2  3  7  8  9]
    # [ 4  5  6 10 11 12]]
    
    print(np.vstack((arr1,arr2)))  # 列合并
    #[[ 1  2  3]
    # [ 4  5  6]
    # [ 7  8  9]
    # [10 11 12]]
    
    print(np.concatenate((arr1, arr2)))  # 默认列合并
    #[[ 1  2  3]
    # [ 4  5  6]
    # [ 7  8  9]
    # [10 11 12]]
    
    print(np.concatenate((arr1, arr2),axis=1))  # 1表示行;0表示列
    #[[ 1  2  3  7  8  9]
    # [ 4  5  6 10 11 12]]
    
    
    # 通过函数创建numpy数组
    
    arr1 = np.array([[1, 2, 3], [4, 5, 6]])  # 可变数据类型
    print(arr1)
    #[[1 2 3]
    # [4 5 6]]
    
    print(np.zeros((5, 5)))
    #[[0. 0. 0. 0. 0.]
    # [0. 0. 0. 0. 0.]
    # [0. 0. 0. 0. 0.]
    # [0. 0. 0. 0. 0.]
    # [0. 0. 0. 0. 0.]]
    
    print(np.ones((5, 5)) * 100)
    #[[100. 100. 100. 100. 100.]
    # [100. 100. 100. 100. 100.]
    # [100. 100. 100. 100. 100.]
    # [100. 100. 100. 100. 100.]
    # [100. 100. 100. 100. 100.]]
    
    print(np.eye(5))  #单位矩阵
    #[[1. 0. 0. 0. 0.]
    # [0. 1. 0. 0. 0.]
    # [0. 0. 1. 0. 0.]
    # [0. 0. 0. 1. 0.]
    # [0. 0. 0. 0. 1.]]
    
    print(np.arange(1,10,2))  # 生成一维的
    #[1 3 5 7 9]
    
    print(np.linspace(0,20,10)) # 平均分成10份  # 构造x坐标轴的值
    #[ 0.          2.22222222  4.44444444  6.66666667  8.88888889 11.11111111 13.33333333 15.55555556 17.77777778 20.        ]
    
    arr = np.zeros((5, 5))
    print(arr.reshape((1,25)))
    #[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
    
    # 数组运算
    
    arr1 = np.array([[1, 2, 3], [4, 5, 6]])  # 可变数据类型
    print(arr1)
    #[[1 2 3]
    # [4 5 6]]
    
    arr2 = np.array([[7, 8, 9], [10, 11, 12]])  # 可变数据类型
    print(arr2)
    #[[ 7  8  9]
    # [10 11 12]]
    
    # +-*/ // % **
    print(arr1*arr2)
    #[[ 7 16 27]
    # [40 55 72]]
    
    print(arr1+arr2)
    #[[ 8 10 12]
    # [14 16 18]]
    
    
    # 运算函数
    
    arr1 = np.array([[1, 2, 3], [4, 5, 6]])  # 可变数据类型
    print(arr1)
    #[[1 2 3]
    # [4 5 6]]
    
    print(np.sin(arr1))
    #[[ 0.84147098  0.90929743  0.14112001]
    # [-0.7568025  -0.95892427 -0.2794155 ]]
    
    print(np.cos(arr1))
    #[[ 0.54030231 -0.41614684 -0.9899925 ]
    # [-0.65364362  0.28366219  0.96017029]]
    
    print(np.sqrt(arr1))
    #[[1.         1.41421356 1.73205081]
    # [2.         2.23606798 2.44948974]]
    
    print(np.exp(arr1))
    #[[  2.71828183   7.3890561   20.08553692]
    # [ 54.59815003 148.4131591  403.42879349]]
    
    # 额外补充(了解)
    
    arr1 = np.array([[1, 2, 3], [4, 5, 6]])  # 可变数据类型
    arr2 = np.array([[7, 8, 9], [10, 11, 12]])  # 可变数据类型
    
    # m*n × n*m = m*m
    print(np.dot(arr1,arr2.T)) 
    #[[ 50  68]
    # [122 167]]
    
    
    # 求逆
    arr1 = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]])
    
    print(np.linalg.inv(arr1))
    #[[ 0.5        -1.          0.5       ]
    # [-3.          3.         -1.        ]
    # [ 2.16666667 -1.66666667  0.5       ]]
    
    
    # numpy的数学方法(了解)
    
    arr1 = np.array([[1, 2, 3], [4, 5, 6]])  # 可变数据类型
    
    print(arr1.var())
    #2.9166666666666665
    
    print(arr1.std())
    #1.707825127659933
    
    print(arr1.mean())
    #3.5
    
    print(arr1.cumsum())  # 累加和
    #[ 1  3  6 10 15 21]
    
    
    # numpy随机数(了解)
    
    print(np.random.rand(3,4))
    #[[0.52306236 0.81121148 0.69762517 0.91050912]
    # [0.95161962 0.02723011 0.41058941 0.62561587]
    # [0.33066979 0.89355263 0.50560677 0.46214671]]
    
    
    print(np.random.randint(1,10,(3,4))) # 最小值1,最大值10,3*4
    #[[7 7 2 5]
    # [3 9 8 3]
    # [9 4 5 8]]
    
    print(np.random.choice([1,2,3,4,5],3))
    #[5 1 4]
    
    arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    np.random.shuffle(arr1)
    print(arr1)
    #[[1 2 3]
    # [4 5 6]
    # [7 8 9]]
    
    # 随机数种子  # 所有的随机数是按照随机数中子生成的
    import time
    
    # 重点
    np.random.seed(int(time.time()))
    np.random.seed(1)
    arr1 = np.random.rand(3,4)  # 可变数据类型
    print(arr1)
    
    #[[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01]
    # [1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01]
    # [3.96767474e-01 5.38816734e-01 4.19194514e-01 6.85219500e-01]]
    
    rs = np.random.RandomState(1)
    print(rs.rand(3,4))
    #[[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01]
    # [1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01]
    # [3.96767474e-01 5.38816734e-01 4.19194514e-01 6.85219500e-01]]
    
  • 相关阅读:
    青浦图书志
    师徒俩就这样比划着 讲着该怎么去使用Reactor Programming
    Stephane Maldini and Violeta Georgieva at SpringOne Platform 2019
    reactor 大会
    这样使用Mono.zip就可以合并多个值进行下一步运算
    You are totally right 和 You are absolutely right 区别
    reacctor 1
    developer.ibm.com
    zip~~~~~~~~~~~
    044 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 06 使用do-while循环实现猜字游戏
  • 原文地址:https://www.cnblogs.com/fxyadela/p/11408620.html
Copyright © 2011-2022 走看看