NumPy

用法汇总

'''
NumPy(多维数组)语法汇总
    
    标量  一个数  1(0维  一个点)
    向量  一组数  [,1,2,3,4] (1维  一条线)
    矩阵 [[,1,2,3,4],
         [,1,2,3,4],
         [,1,2,3,4]]     (2维数组)
    张量  多个矩阵组成 tensor n维 机器学习
    
1.导包
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt  # 画图
    plt.rcParams['font.sans-serif'] = 'SimHei'
    plt.rcParams['axes.unicode_minus'] = False
    # 后两句是支持中文

2.ndarray  
     n dim维度 array 数组
     np.array(object,dtype=None,*,……)  
        dtype:data type,元素的数据类型,不是数组的数据类型。可自己指定数据类型dtype,如dtype=np.int8
            np.int8  :8位 11111111 2的8次方即256就是当前的数字不能超过256.其他依次类推
        object
            特点:默认所有元素的类型是相同的,如果传入的数据中包含不同类型的数据,会统一为同一类型。优先级:str>float>int
    数据类型:
        int:int8、uint8、int16、int32、int64
        float:float16、float32、float64
        str:字符串
    创建方式
    1.array
        np.array()  传入列表得到数组
        参数是列表
            list1 = [1, 2, 3, 4]
        常:n = np.array(list1)
            type(n)  # numpy.ndarray 
    2.ones
        可以生成多维数组
        np.ones(shape,dtype=None,order='C')
            shape数据形状 如 (3,4) 四行三列整数
            dtype=None 元素类型
            order='C'  可以选C/F  默认是C
        常:
        np.ones(3) 一维3个1
        np.ones((3,4),dtype = np.int8)  # 四行三列1 
    3.zeros
        可以生成多维数组  与上ones差不多
        常: np.zeros((3,4),dtype = np.int8)  # 四行三列0
    4.eye
        
    5.linspace
        np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
        创建等差数列 前两个参数必须写,第三个参数num是50,指默认生成50个数。 
            start 开始值
            stop  结束值
            num=50  默认生成50个数
            endpoint=True 是否包含最后一个数,默认包含
            retstep=False  是否返回等差值(步长),默认不返回
            dtype=None  元素类型
        常: np.linspace(2,100)   # array([2,4,……,98,100])
    6.arange
        np.arange(start,stop,step,dtype=None)  与range差不多,只不过得到的是ndarray类型的数组
        常: np.arange(2,100,2)
    7.random.randint
        np.random.randint(low,high=None,size=None,dtype=None)
            low:最小值
            high=None
                high=None时,生成的数值在[0,low)区间内
                使用high时,生成的数值在[low,high)区间内
            size=None 数组型状,默认只能生成一个随机值,类似前面的shape
            dtype=None 元素类型b
        特点:可以生成多维数组
        常:
        np.random.randint(0,100,size=6)      生成6个数的一维数组
        np.random.randint(0,100,size=(6,5))  生成6行5列的二维数组
        np.random.randint(0,100,size=(6,5,7,8))  生成四维数组(size/shape的()中有几个数就代表几维)       
3.展现方式
    1.print()  一般在numpy中不用这个
    2.display()  跟print()差不多,但是在matplotlib画图展示的时候会更好看
4.四个重要属性
    n.ndim  维度 
    n.shape 形状(各维度的长度)  重要,常用,其他了解即可
    n.size  总长度
    n.dtype 元素类型
    
5.基本操作
    1.索引
        1.一维
            n1=np.arange(10,20)  # array([10,11,12,13,14,15,16,17,18,19])
            n1[3]   # 13
            n1[3],n1[-1]  # (13,19)            
        2.多维
            n2 = np.random.randint(10,30,size=(5,8))  # 5行8列的随机数组
            n2[2]  # array([27,10,29,19,27,29,17,11])  取到第三行,得到一个一维数组
            n2[2][-1]  # 11 相当于在上面的一维数组中再取最后一个数(-1),得到11
                可以简写为 n2[2,-1]  # 11
    2.根据索引修改值
        1.一维
            n1=np.arange(10,20)  # array([10,11,12,13,14,15,16,17,18,19])
            n1[3] = 9999   
            n1             # array([10,11,12, 9999 ,14,15,16,17,18,19])      
        2.多维
            n2[2,-1] = 666
            n2         
    3.切片
        1.一维
            n1[:]  # array([10,11,12,13,14,15,16,17,18,19]) 相当于取全部的
            n1[3:]  # array([13,14,15,16,17,18,19])  从第三个数开始取
            n1[3:6]  # array([13,14,15])  从第三个数开始取,到第六个数(最后一个不包含)
        2.多维
            1.取行
                1.取一行:索引(上述)
                2.取连续/有规律的多行
                    n2 = np.random.randint(0,10,size=(5,8))  # 5行8列的随机数组
                    n2[:3]  # 取到数组的前三行,得到的是二维数组
                    n2[3:]  # 取第四行到最后的数组,得到的是二维数组
                    n2[::-1]  # 行倒序  最后一行变第一行……以此类推
                3.取不连续的多行:使用中括号
                    n2[[4,3,3]]   # 取 第四行,第三行,第三行
                4.总结:
                    取一行:索引
                    取连续/有规律的多行:切片
                    取不连续的多行:使用中括号(重点)
            2.取列
                1.取一列:索引
                    n2[:,3]   # 取第三列  逗号是分隔维度的(重要)
                2.取连续/有规律的多列:切片
                    n2[:,:3]   # 取第一列到第三列 
                3.取不连续的多列:使用中括号
                    n2[:, [4,3,3]]   # 取第四列,第三列,第三列
        2.根据索引修改值
        1.一维
            n1=np.arange(10,20)  # array([10,11,12,13,14,15,16,17,18,19])
            n1[3] = 9999   
            n1             # array([10,11,12, 9999 ,14,15,16,17,18,19])      
    4.切片修改值
        1.一维
            n2[2:5] = 0
            n2[2:5] = [666,777,888]  # 三个索引对三个数,几个索引对应几个数(不能多/少)
            n2[[1,3,4]] = 0  # 将第一三四行的数改为0
        2.多维
            n = array([1,8,-3,8,8,6,5]) 
            i = np.argwhere(n == np.max(n))  # array([[1],[3],[4]]) 二维   
            n[i] = 0                        # 会自动将n[[[1],[3],[4]]]化简 
            n    # array([1,0,-3,0,0,6,5]) 
6.图片练习:把猫翻转
    1.读取图片:
        cat = plt.imread('文件路径.jpg')  # 三维数组 array([[[……]]]) 有几个[]就代表几维
            图片:
                三维:彩色图片 (421,725,3)  图片中
                      3 :三色 即RGB  
                    421 :行 即高度  
                    725 :列 宽度
                二维:黑白图片
    2.查看数据形状
        cat.shape
    3.显示图片
        plt.imshow(cat)
        图片存储:plt.imsave(cat,'图片保存地址')  # 要用自查
    4.上下翻转  行交换
        plt.imshow(cat[::-1])
    5.左右翻转  列交换
        plt.imshow(cat[:, ::-1])
    6.第三个维度翻转(颜色  红色和蓝色交换,绿色不变 第一行和第三行交换)
        plt.imshow(cat[:, :, ::-1])
    7.裁剪
        plt.imshow(cat[50:370, 110:600])
7.变形
    reshape
        n1 = np.arange(1,21)  # array([1,2,……,20])
        n1.reshape(4,5)   # 将这个数组变成4行5列的数  
        n1.reshape(2,2,5)  # 三维
    一定要保证重塑后的行×列的数量跟之前的数量相等  比如现在的20个数分成4×5,不一样会报错
    为了减少计算,可以写-1,-1代表剩余的维度,会自动匹配。一个reshape里只能有一个-1:
        n1.reshape(4,-1) 
        n1.reshape(2,2,-1)
8.聚合操作(一维)
    n1.sum()
    np.min(n1)  
    np.max(n1) 
    np.mean(n1) 
    np.average(n1)   # 不常用
    np.median(n1)   # 中位数
    np.percentile(n1)  # 百分位数
    np.argmin(n1)     # 最小值对应的下标         # 一般arg开头的都是取下标的
    np.argmax(n1)     # 最大值对应的下标
    np.std(n1)    # 标准差
    np.var(n1)    # 方差 = 标准差的平方
    np.power(3,4)   # 次方,次幂 3的4次方
    3**4  # 更推荐使用这个  运行时间更短,书写简单
    np.argwhere()   # 按条件查找
        n = array([1,8,-3,8,8,6,5])
            np.argmax(n) = 1  # 最大值下标是1
            n[np.argmax(n)] = 0 # 即 n[最大值下标]=n[1] = 0  就是把最大值下标的数据修改为0
        argmax和argmin:
            只会返回一个下标,只能找到一个
        argwhere:
            np.argwhere(n == np.max(n))  # array([[1],[3],[4]])
9.矩阵运算    
    1.矩阵积,矩阵乘(三种)
        np.dot(n3, n4)    # 行乘列相加,线性代数的算法(第一个矩阵的列数 等于 第二个矩阵的行数)
        n3 * n4           # 但是n3、n4必须是同型矩阵
        n3 * 10           # 矩阵乘以一个数
    2.矩阵 和 数 数学运算
        n + 10
        n - 10
        n * 10
        n / 10
        n // 2
        n % 3  # 余数
        n ** 3  # 次方
    3.矩阵 和 数 比较运算符
        n > 5  
    4.矩阵 和 矩阵 : 须是同型矩阵:行数和列数对应相等,但有特殊情况,在5中说明:广播机制
        n3 * n4
        n3 + n4 
    5.广播机制
        1.尽可能扩展维度让2个矩阵变成同型矩阵      
        2.扩充维度的数据 会使用已经存在的数据
            n1 = array([1,2,3])
            n2 = array([[2,2,4],
                        [1,1,3]])
            n1 + n2 
                会先将n1变成 array([[1,2,3],
                                   [1,2,3]])
                然后再加上n2 array([[2,2,4],
                                   [1,1,3]])
                得到        array([[3,4,7],
                                   [2,3,6]])
        3.但是不能扩展成同型矩阵的时候会报错
    6.线性代数中其他矩阵操作
        n = np.array([[1, 2, 3], 
                  [2, 3, 4], 
                  [4, 6, 7]])
        
            3*3 方阵:行数==列数
            阶数:3阶
        提供线性代数的功能
        np.linalg.det(n)   # 行列式的值
            行列式的值: 主对角线  - 副对角线
            主对角线: 1*3*7 + 2*4*4 + 3*2*6 = 21+32+36 = 89
            副对角线: 3*3*4 + 4*6*1 + 7*2*2 = 36+24+28 = 88
            主对角线  - 副对角线 = 89 - 88 - 1
              
9.交换首尾两行
    n1[[0, -1]] = n1[[-1,0]]   
10.归一化
    (n5 - min1) / (max1 - min1)     # 得到[0,1]组合成的数据  

'''

'''
NumPy(多维数组)语法汇总
    
    标量  一个数  1(0维  一个点)
    向量  一组数  [,1,2,3,4] (1维  一条线)
    矩阵 [[,1,2,3,4],
         [,1,2,3,4],
         [,1,2,3,4]]     (2维数组)
    张量  多个矩阵组成 tensor n维 机器学习
    
1.导包
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt  # 画图
    plt.rcParams['font.sans-serif'] = 'SimHei'
    plt.rcParams['axes.unicode_minus'] = False
    # 后两句是支持中文

2.ndarray  
     n dim维度 array 数组
     np.array(object,dtype=None,*,……)  
        dtype:data type,元素的数据类型,不是数组的数据类型。可自己指定数据类型dtype,如dtype=np.int8
            np.int8  :8位 11111111 2的8次方即256就是当前的数字不能超过256.其他依次类推
        object
            特点:默认所有元素的类型是相同的,如果传入的数据中包含不同类型的数据,会统一为同一类型。优先级:str>float>int
    数据类型:
        int:int8、uint8、int16、int32、int64
        float:float16、float32、float64
        str:字符串
    创建方式
    1.array
        np.array()  传入列表得到数组
        参数是列表
            list1 = [1, 2, 3, 4]
        常:n = np.array(list1)
            type(n)  # numpy.ndarray 
    2.ones
        可以生成多维数组
        np.ones(shape,dtype=None,order='C')
            shape数据形状 如 (3,4) 四行三列整数
            dtype=None 元素类型
            order='C'  可以选C/F  默认是C
        常:
        np.ones(3) 一维3个1
        np.ones((3,4),dtype = np.int8)  # 四行三列1 
    3.zeros
        可以生成多维数组  与上ones差不多
        常: np.zeros((3,4),dtype = np.int8)  # 四行三列0
    4.eye
        
    5.linspace
        np.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)
        创建等差数列 前两个参数必须写,第三个参数num是50,指默认生成50个数。 
            start 开始值
            stop  结束值
            num=50  默认生成50个数
            endpoint=True 是否包含最后一个数,默认包含
            retstep=False  是否返回等差值(步长),默认不返回
            dtype=None  元素类型
        常: np.linspace(2,100)   # array([2,4,……,98,100])
    6.arange
        np.arange(start,stop,step,dtype=None)  与range差不多,只不过得到的是ndarray类型的数组
        常: np.arange(2,100,2)
    7.random.randint
        np.random.randint(low,high=None,size=None,dtype=None)
            low:最小值
            high=None
                high=None时,生成的数值在[0,low)区间内
                使用high时,生成的数值在[low,high)区间内
            size=None 数组型状,默认只能生成一个随机值,类似前面的shape
            dtype=None 元素类型b
        特点:可以生成多维数组
        常:
        np.random.randint(0,100,size=6)      生成6个数的一维数组
        np.random.randint(0,100,size=(6,5))  生成6行5列的二维数组
        np.random.randint(0,100,size=(6,5,7,8))  生成四维数组(size/shape的()中有几个数就代表几维)       
3.展现方式
    1.print()  一般在numpy中不用这个
    2.display()  跟print()差不多,但是在matplotlib画图展示的时候会更好看
4.四个重要属性
    n.ndim  维度 
    n.shape 形状(各维度的长度)  重要,常用,其他了解即可
    n.size  总长度
    n.dtype 元素类型
    
5.基本操作
    1.索引
        1.一维
            n1=np.arange(10,20)  # array([10,11,12,13,14,15,16,17,18,19])
            n1[3]   # 13
            n1[3],n1[-1]  # (13,19)            
        2.多维
            n2 = np.random.randint(10,30,size=(5,8))  # 5行8列的随机数组
            n2[2]  # array([27,10,29,19,27,29,17,11])  取到第三行,得到一个一维数组
            n2[2][-1]  # 11 相当于在上面的一维数组中再取最后一个数(-1),得到11
                可以简写为 n2[2,-1]  # 11
    2.根据索引修改值
        1.一维
            n1=np.arange(10,20)  # array([10,11,12,13,14,15,16,17,18,19])
            n1[3] = 9999   
            n1             # array([10,11,12, 9999 ,14,15,16,17,18,19])      
        2.多维
            n2[2,-1] = 666
            n2         
    3.切片
        1.一维
            n1[:]  # array([10,11,12,13,14,15,16,17,18,19]) 相当于取全部的
            n1[3:]  # array([13,14,15,16,17,18,19])  从第三个数开始取
            n1[3:6]  # array([13,14,15])  从第三个数开始取,到第六个数(最后一个不包含)
        2.多维
            1.取行
                1.取一行:索引(上述)
                2.取连续/有规律的多行
                    n2 = np.random.randint(0,10,size=(5,8))  # 5行8列的随机数组
                    n2[:3]  # 取到数组的前三行,得到的是二维数组
                    n2[3:]  # 取第四行到最后的数组,得到的是二维数组
                    n2[::-1]  # 行倒序  最后一行变第一行……以此类推
                3.取不连续的多行:使用中括号
                    n2[[4,3,3]]   # 取 第四行,第三行,第三行
                4.总结:
                    取一行:索引
                    取连续/有规律的多行:切片
                    取不连续的多行:使用中括号(重点)
            2.取列
                1.取一列:索引
                    n2[:,3]   # 取第三列  逗号是分隔维度的(重要)
                2.取连续/有规律的多列:切片
                    n2[:,:3]   # 取第一列到第三列 
                3.取不连续的多列:使用中括号
                    n2[:, [4,3,3]]   # 取第四列,第三列,第三列
        2.根据索引修改值
        1.一维
            n1=np.arange(10,20)  # array([10,11,12,13,14,15,16,17,18,19])
            n1[3] = 9999   
            n1             # array([10,11,12, 9999 ,14,15,16,17,18,19])      
    4.切片修改值
        1.一维
            n2[2:5] = 0
            n2[2:5] = [666,777,888]  # 三个索引对三个数,几个索引对应几个数(不能多/少)
            n2[[1,3,4]] = 0  # 将第一三四行的数改为0
        2.多维
            n = array([1,8,-3,8,8,6,5]) 
            i = np.argwhere(n == np.max(n))  # array([[1],[3],[4]]) 二维   
            n[i] = 0                        # 会自动将n[[[1],[3],[4]]]化简 
            n    # array([1,0,-3,0,0,6,5]) 
6.图片练习:把猫翻转
    1.读取图片:
        cat = plt.imread('文件路径.jpg')  # 三维数组 array([[[……]]]) 有几个[]就代表几维
            图片:
                三维:彩色图片 (421,725,3)  图片中
                      3 :三色 即RGB  
                    421 :行 即高度  
                    725 :列 宽度
                二维:黑白图片
    2.查看数据形状
        cat.shape
    3.显示图片
        plt.imshow(cat)
        图片存储:plt.imsave(cat,'图片保存地址')  # 要用自查
    4.上下翻转  行交换
        plt.imshow(cat[::-1])
    5.左右翻转  列交换
        plt.imshow(cat[:, ::-1])
    6.第三个维度翻转(颜色  红色和蓝色交换,绿色不变 第一行和第三行交换)
        plt.imshow(cat[:, :, ::-1])
    7.裁剪
        plt.imshow(cat[50:370, 110:600])
7.变形
    reshape
        n1 = np.arange(1,21)  # array([1,2,……,20])
        n1.reshape(4,5)   # 将这个数组变成4行5列的数  
        n1.reshape(2,2,5)  # 三维
    一定要保证重塑后的行×列的数量跟之前的数量相等  比如现在的20个数分成4×5,不一样会报错
    为了减少计算,可以写-1,-1代表剩余的维度,会自动匹配。一个reshape里只能有一个-1:
        n1.reshape(4,-1) 
        n1.reshape(2,2,-1)
8.聚合操作(一维)
    n1.sum()
    np.min(n1)  
    np.max(n1) 
    np.mean(n1) 
    np.average(n1)   # 不常用
    np.median(n1)   # 中位数
    np.percentile(n1)  # 百分位数
    np.argmin(n1)     # 最小值对应的下标         # 一般arg开头的都是取下标的
    np.argmax(n1)     # 最大值对应的下标
    np.std(n1)    # 标准差
    np.var(n1)    # 方差 = 标准差的平方
    np.power(3,4)   # 次方,次幂 3的4次方
    3**4  # 更推荐使用这个  运行时间更短,书写简单
    np.argwhere()   # 按条件查找
        n = array([1,8,-3,8,8,6,5])
            np.argmax(n) = 1  # 最大值下标是1
            n[np.argmax(n)] = 0 # 即 n[最大值下标]=n[1] = 0  就是把最大值下标的数据修改为0
        argmax和argmin:
            只会返回一个下标,只能找到一个
        argwhere:
            np.argwhere(n == np.max(n))  # array([[1],[3],[4]])
9.矩阵运算    
    1.矩阵积,矩阵乘(三种)
        np.dot(n3, n4)    # 行乘列相加,线性代数的算法(第一个矩阵的列数 等于 第二个矩阵的行数)
        n3 * n4           # 但是n3、n4必须是同型矩阵
        n3 * 10           # 矩阵乘以一个数
    2.矩阵 和 数 数学运算
        n + 10
        n - 10
        n * 10
        n / 10
        n // 2
        n % 3  # 余数
        n ** 3  # 次方
    3.矩阵 和 数 比较运算符
        n > 5  
    4.矩阵 和 矩阵 : 须是同型矩阵:行数和列数对应相等,但有特殊情况,在5中说明:广播机制
        n3 * n4
        n3 + n4 
    5.广播机制
        1.尽可能扩展维度让2个矩阵变成同型矩阵      
        2.扩充维度的数据 会使用已经存在的数据
            n1 = array([1,2,3])
            n2 = array([[2,2,4],
                        [1,1,3]])
            n1 + n2 
                会先将n1变成 array([[1,2,3],
                                   [1,2,3]])
                然后再加上n2 array([[2,2,4],
                                   [1,1,3]])
                得到        array([[3,4,7],
                                   [2,3,6]])
        3.但是不能扩展成同型矩阵的时候会报错
    6.线性代数中其他矩阵操作
        n = np.array([[1, 2, 3], 
                  [2, 3, 4], 
                  [4, 6, 7]])
        
            3*3 方阵:行数==列数
            阶数:3阶
        提供线性代数的功能
        np.linalg.det(n)   # 行列式的值
            行列式的值: 主对角线  - 副对角线
            主对角线: 1*3*7 + 2*4*4 + 3*2*6 = 21+32+36 = 89
            副对角线: 3*3*4 + 4*6*1 + 7*2*2 = 36+24+28 = 88
            主对角线  - 副对角线 = 89 - 88 - 1
              
9.交换首尾两行
    n1[[0, -1]] = n1[[-1,0]]   
10.归一化
    (n5 - min1) / (max1 - min1)     # 得到[0,1]组合成的数据  

'''

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值