• [人工智能]Numpy全汇总


    1. 概述

    • np.array() 将列表转换为数组
    import numpy as np
    
    array = [1, 2, 3, 4, 5]
    array = np.array(array)
    
    • shape 打印矩阵的维度, 也可以使用np.shape
    import numpy as np
    
    array = [1, 2, 3, 4, 5]
    array = np.array(array)
    print(array.shape)
    

    2. array 结构

    • dtype 打印数组的数据类型
    import numpy as np 
    np_array = [1, 2, 3, 4]
    np_array = np.array(np_array)
    
    print(np_array.dtype)
    
    • itemsize判断数组中每一个数字所占的字节数
    print(np_array.itemsize)
    
    • size 打印出数组中的元素个数, 不关心矩阵的维度
    print(np_array.size)
    
    • ndim 打印数组中的维度信息
    print(np_array.ndim)
    
    • fill(0) 表示对当前数据进行填充,0表示填充的值
    # .fill 对当前数据进行填充
    np_array = np.array([1, 2])
    np_array.fill(0)
    print(np_array)
    
    • numpy索引与切片
    np_array = np.array([1, 2, 3, 4])
    print(np_array[0])
    print(np_array[-2:])
    
    • copy 进行浅拷贝
    np_array2 = np_array.copy()
    
    • dtype设置数组类型

    将列表转换为bool值根据bool值进行取值操作

    np_array = np.arange(0, 100, 10)
    # 将列表转换为Bool值
    bool_array = np.array([1, 0, 0, 1, 1, 1, 1, 0, 0, 0], dtype=bool)
    # 根据bool值进行取值
    print(np_array[bool_array])
    
    • 根据大于或者小于获得bool值根据bool值进行取值操作
    np_array = np.random.rand(10)
    print(np_array)
    bool_array = np_array > 0.5
    print(bool_array)
    
    • np.where 对bool值进行操作

      获得True的索引值

    np_array = np.random.rand(10)
    bool_array = np_array > 0.5
    index = np.where(bool_array)
    print(index)
    print(np_array[index])
    
    • ndtype 输出字节数
    print(np_array.nbytes)
    
    • astype 进行数据类型的转换但是实际数据不发生改变
    np_array2 = np_array.astype(np.float32)
    print(np_array2.dtype)
    
    • np.object格式保存了数据的原来格式
    array = np.array([1, 10, 3.5, 'str'], dtype=np.object)
    

    3. 数值计算

    • sum(axis=0) 进行数组的加和操作
    import numpy as np
    
    np_array = np.array([[1, 2, 3],
                           [4, 5, 6]])
    # 对axis=0,进行行与行进行加和   1-行  0-列
    print(np_array.sum(axis=0))
    # 行-最小
    print(np_array.min(axis=1))
    
    
    # 所有
    print(np_array.sum())
    # -1 行
    print(np_array.sum(axis=-1))
    
    • prod(axis=0) 进行数组之间的乘积操作,axis=0表示行与行之间进行乘积
    print(np_array.prod())  # 所有元素进行相乘操作
    print(np_array.prod(axis=1))
    
    • min(axis=0) 找出数组中数据最小的值,axis=0表示找出每一列的最小值,从上到下的操作
    print(np_array.min(axis=0))
    
    • max(axis=0) 找出数组中数据最大值的操作
    print(np_array.max(axis=0))
    
    • argmax(axis=1) 找出数组中每一行的最大值的位置
    print(np_array.argmax(axis=1))
    
    • mean(axis=1) 找出数组中每一行均值的大小
    print(np_array.mean(axis=1))
    
    • std(axis=1) 求出数组中每一行的标准差
    print(np_array.std(axis=1))
    
    • var(axis=1) 求出数组中每一行的方差
    print(np_array.var(axis=1))
    
    • clip(2, 4)进行数据的范围限制, 小于2的用2表示,大于4的用4表示
    print(np_array.clip(2, 4))
    
    • round(decimals=1) 进行四舍五入,decimals表示保留小数点的后几位数
    np_array = np.array([1.12, 2.12, 3.12, 4.6])
    print(np_array.round(decimals=1))
    

    4. 排序

    • np.sort(value, axis=0) 对数据进行排序操作
    import numpy as np
    np_array = np.array([[1.5, 1.3, 7.5],
                           [5.6, 7.8, 1.2]])
    # 对每一列进行排序
    print(np.sort(np_array, axis=0))
    
    • argsort(axis=0) 打印排序后的索引位置
    print(np_array.argsort(axis=0))
    
    • np.linspace(0, 10, 11) # 进行范围的数据拆分
    np_array = np.linspace(0, 10, 11)
    
    • np.searchsorted(np, value) # 将value插入np_array 返回的是插入后的索引值
    print(np.searchsorted(np_array, value))
    
    • np.lexsort # 指定列队数组进行排序操作
    np_array = np.array([[1, 0, 6],
                           [2, 7, 0],
                           [3, 3, 1],
                           [2, 4, 0]])
    
    index = np.lexsort([np_array[:, 2]])
    print(np_array[index])
    

    5. 数组形状

    • np.reshape(value, (2, 5)) 进行矩阵的维度变化
    np_array = np.arange(10)
    print(np_array.shape)
    # 通过.shape改变数据的维度
    np_array.shape = 2, 5
    print(np.reshape(np_array, (2, 5)))
    print(np_array)
    
    • np.newaxis 表示增加一个矩阵维度
    # 新增加一个维度 np.newaxis
    np_array = np.array([[1, 2],
                           [3, 4]])
    np_array = np_array[:, :, np.newaxis]
    print(np_array.shape)
    
    • squeeze(axis=3) 表示指定一个维度进行去除
    print(np_array.squeeze(axis=3).shape)
    
    • transpose() 表示进行转置操作
    np_array = np.arange(0, 10, 1)
    np_array.shape = 2, 5
    print(np_array.transpose())
    
    • np.concatenate((a, b), axis=0) 进行矩阵的串接操作,(a, b)表示需要串接的tuple,axis=0进行上下的串接
    a = np.array([[123, 456, 789], [3234, 456, 134]])
    b = np.array([[123, 456, 789], [123, 546, 134]])
    c = np.concatenate((a, b), axis=0)
    print(c)
    
    • np.vstack((a, b)) 进行矩阵的上下位置上的串接
    c = np.vstack((a, b))
    print(c)
    
    • np.hstack((a, b)) 进行矩阵左右位置上的串接
    c = np.hstack((a, b))
    print(c)
    
    • flatten() 进行拉平操作,拉成一个维度
    print(c.flatten())
    
    • ravel() 进行拉平操作,也是拉成一个维度
    print(c.ravel())
    

    6. 数组生成

    • np.arange(0, 10, 1) 0表示开始,10表示结束,1表示中间间隔
    import numpy as np
    # 根据np.arange进行数组1表示开始位置,10表示末位置, 2表示间隔
    print(np.arange(1, 10, 2, dtype=np.float32))
    
    • np.linspace(0, 9, 10) 0表示起始位置,9表示结束,10表示拆分成10份
    print(np.linspace(0, 9, 10))
    
    • np.logspace(0, 1, 11) 0表示起始位置, 1表示终止位置,11表示拆成11分,然后在输入
    print(np.logspace(0, 1, 11))  #等价于10**0.1
    
    • np.meshgrid(x, y) 生成一个网格矩阵
    x = np.linspace(0, 10, 11)
    y = np.linspace(10, 20, 11)
    x, y = np.meshgrid(x, y)
    print(x)
    print(y)
    
    • np.r_[0:10:1] 构造一个行向量
    print(np.r_[0:10:1])
    
    • np.c_[0:10:1] 构造一个列向量
    print(np.c_[0:10:1])
    
    • np.zeros(3)
    import numpy as np
    # np.zeros 构造一个零矩阵
    print(np.zeros(3))
    print(np.zeros((2, 3)))
    
    • np.ones((3, 3)) np.ones((3, 3)) 表示3*3的维度
    print(np.ones((3, 3)))
    
    • np.empty(size) 生成一个空矩阵
    a = np.empty(6)
    print(a)
    
    • np.zeros_like() 生成一个维度相同的零矩阵
    np_array = np.array([1, 2, 3, 4, 5])
    np_array2 = np.zeros_like(np_array)
    print(np_array2)
    
    • np.ones_like() 生成一个维度相同的1矩阵
    np_array3 = np.ones_like(np_array)
    print(np_array3)
    
    • np.identity(5) 生成一个形状是5的单位矩阵
    print(np.identity(5))
    

    7. 运算

    • np.multiply(x, y) 将x和y进行对应位置相乘操作
    import numpy as np 
    
    x = np.array([5, 5])
    y = np.array([2, 2])
    # np.multiply(x, y) 将x和y进行对应位置相乘操作
    print(np.multiply(x, y))
    
    • np.dot(x, y) 将x和y进行点乘操作,即矩阵运算(2, 1) * (1, 2) = (2, 2)
    print(np.dot(x.reshape(2, 1), y.reshape(1, 2)))
    
    • ndarray 四则运算
    # 会进行数据的自动补全操作
    x = np.array([1, 1, 1])
    y = np.array([[1, 2, 3], [3, 4, 5]])
    print(x + y)
    
    • np.logical_and 如果两个都是真的就是真
    x = np.array([1, 0, 1])
    y = np.array([1, 1, 0])
    print(x==y)
    print(np.logical_and(x, y))
    
    • np.logical_or 如果两个中有一个为真就是真
    print(np.logical_or(x, y))
    
    • np.logical_not 如果第二个数为1就是1,否者两个数都为0,等于1
    print(np.logical_not(x, y))
    

    8. 随机矩阵

    • np.random.rand(3, 2) 构造一个(3, 2)的随机矩阵
    import numpy as np
    # 构造一个0,1之间的随机矩阵
    print(np.random.rand(3, 2))
    
    • np.random.randint(0, 3, size=(2, 5)) 构造一个0到2的随机整数矩阵,矩阵的维度是2,5
    print(np.random.randint(0, 3, size=(5, 4)))
    
    • np.random.sample() 返回一个0到1的随机数
    print(np.random.sample())
    
    • np,random.uniform(0, 3, size=(2, 5)) 从一个均匀的分布中随机取值
    print(np.random.uniform(0, 1, size=(1, 1)))
    
    • np.random.normal(mu, sigma, size) 根据均值和标准差进行随机生成高斯矩阵
    m = 0
    sigma = 0.1 #标准差
    print(np.random.normal(m, sigma, size=(10, 1)))
    
    • np.set_printoptions(precision=3) 进行输出的精度设置,3表示的小数点的个数
    np.set_printoptions(precision=3)
    mu, sigma = 0, 0.1
    n = np.random.normal(mu, sigma, 10)
    print(n)
    
    • np.random.shuffle() 对样本进行洗牌操作
    np_array = np.arange(0, 10, 1)
    np.random.shuffle(np_array)
    print(np_array)
    
    • np.random.seed(100) 设置随机种子,让每次随机获的参数的结果相同,为了更好的进行对比
    np.random.seed(100)
    
    x = np.random.normal(0, 0.1, size=(1, 10))
    print(x)
    

    9. 读写

    • np.loadtxt('np.txt', delimiter=",", skiprows=1), delimiter 表示分割符, skiprows表示去除第一行, usecols指定使用那几列数据
    y = np.loadtxt('np.txt', delimiter=',', skiprows=1)
    print(y)
    
    • np.savetxt('np2.txt', np_array, fmt='%.2f', delimiter=',')
    np_array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)
    np.savetxt('np2.txt', np_array, fmt='%.2f', delimiter=',')
    
    • 进行单个array参数的载入和读取,保存的格式是npy
    np_array = np.array([1, 2, 3, 4], dtype=np.float32)
    
    np.save('np3.npy', np_array)  # 写入文件
    
    np_array = np.load('np3.npy')  # 读取文件
    print(np_array)
    
    • 进行多个array参数的载入和读取,使用的是np.savez,保存的格式是.npz,读取时使用key
    np_array = np.array([1, 2, 3, 4], dtype=np.float32)
    np_array2 = np.array([4, 5, 6, 7], dtype=np.float32)
    
    np.savez('np.npz', a=np_array, b=np_array2)
    
    data = np.load('np.npz')
    print(data['a'])
    print(data['b'])
    

    10. 练习题

    • np.version 打印numpy当前的版本
    import numpy as np
    print(np.__version__)
    
    • 构造一个全零矩阵,并打印其所占内存数
    z = np.zeros((5, 5))
    print(z.size * z.itemsize)
    print(z.nbytes)
    
    • 打印一个函数的帮助文档 help(np.info(np,add))
    print(help(np.info(np.add)))
    
    • 创建一个10-49的数组,并将其倒序排列
    np_array = np.arange(10, 50, 1)
    np = np_array[::-1]
    print(np)
    
    • np.nonzero(np_array) 找出一个数组中不为0的索引值
    print(np.nonzero([1, 2, 3, 4, 5, 0, 0, 3]))
    
    • 随机构造一个3*3矩阵, 打印其最大值和最小值
    np.random.seed(9)
    np_array = np.random.randint(0, 10, size=(5, 6))
    print(np_array.min())
    print(np_array.max())
    
    • np.pad(np_array, add_size, 'constant', constant_values=0) 构造一个5*5的矩阵,令其值为1,在最外层加上一圈0
    np_array = np.ones((5, 5))
    np_array2 = np.pad(np_array, 1, 'constant', constant_values=0)
    print(np_array2)
    
    • np.unravel_index(100, (6, 7, 8)) 构建一个shape为(6, 7, 8)的矩阵,并找出第100个元素的索引值
    print(np.unravel_index(100, (6, 7, 8)))
    
    • 对一个5*5矩阵做0到1归一化操作
    np_array = np.random.random((5, 5))
    np_array = (np_array - np_array.min()) / (np_array.max() - np_array.min())
    
    • np.intersect1d(z1, z2) 找出两个数组相同的数
     np.random.randint(0, 11, 10)
    z2 = np.random.randint(0, 11, 10)
    print(np.intersect1d(z1, z2))
    
    • np.datetime64('today', 'D') np.timedelta64(1, 'D') # 得到昨天今天明天
    yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
    today = np.datetime64('today', 'D')
    tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
    print(yesterday)
    
    • 得到一个月中所有的天数
    print(np.arange('2017-10', '2017-11', dtype='datetime64[D]'))
    
    • np.floor(value) 取出一个数的整数部分
    np_array = np.random.uniform(0, 10, 10)
    print(np.floor(np_array))
    
    • z.flags.writeable 使得这个数组不能被改变
    z = np.zeros(5)
    z.flags.writeable = False
    z[0] = 1
    
    • np.set_printoptin(threshold=np.nan) 使得数组全部打印出来
    np.set_printoptions(threshold=np.nan)
    z = np.zeros((5, 5))
    print(z)
    
    • 在一个数组中,找出最接近一个数的索引
    z = np.arange(100)
    v = np.random.uniform(0, 100)
    print(v)
    index = np.abs(z - v).argmin()
    print(index)
    
    • 进行float32与int32的类型转换
    z = np.arange(10, dtype=np.float32)
    l = z.astype(np.int32)
    print(l.dtype)
    
    • 打印数组的元素坐标与值
    z = np.arange(9).reshape(3, 3)
    for index, value in np.ndenumerate(z):
        print(index, value)
    
    • 按照数组的某一列进行排序
    z = np.random.randint(0, 10, (4, 3))
    print(z[z[:, 1].argsort()])
    
    • np.bincount(np_array) 统计数组中元素的个数
    z = np.array([1, 1, 1, 2, 2, 3, 4, 5])
    print(np.bincount(z))
    
    • 对最后两个维度进行加和操作
    np_array = np.random.randint(0, 10, (4, 4, 4, 4))
    print(np_array.sum(axis=(-2, -1)))
    
    • 交换矩阵的两行
    np_array = np.random.randint(0, 10, (3, 4))
    np_array[[1, 2]] = np_array[[2, 1]]
    print(np_array)
    
    • 找出数组中最常出现的数字
    z = np.random.randint(0, 10, 10)
    print(np.bincount(z).argmax())
    
    • np.argpartition(-z, n)[:n] 找出K个最大值的索引和值
    z = np.arange(10000)
    np.random.shuffle(z)
    n = 5
    print(np.argpartition(-z, n)[:n])
    
    • np.all(x==y, aixs=1) 找出一行中都相同的数,打印True
    # 找出所有元素都相同的数据
    x = np.array([[1, 1]])
    p = np.array([[1, 1]])
    print(np.all(x == p, axis=1))
    
    z = np.random.randint(0, 5, (10, 3))
    print(np.all(z[:, 1:]==z[:, :-1]))
    

    参考

    更多交流,请加微信:itzixueba.请备注好友来自博客园<大周>
  • 相关阅读:
    C# 多线程 弹出模态MessageBox的一种方法
    CentOS 7安装Docker
    CentOS 6 安装Docker
    docker三要素
    openstack_dashboard无法获取nova
    cinder安装与配置
    Dashboard安装与配置
    openstack-neutron安装与配置
    openstack在controller节点使用openstack network agent list不显示计算节点
    nova安装与配置
  • 原文地址:https://www.cnblogs.com/itzixueba/p/15747771.html
Copyright © 2020-2023  润新知