zoukankan      html  css  js  c++  java
  • Numpy

    Numpy的概念

    是python中一种高性能的数据分析的基础包,主要是提供数组对象,专门用来做数组的运算,是一个多维的数组对象(ndarray)

    关于安装

    装完anaconda以后,默认会安装Numpy,如果没有的话,直接用pip.install.Numpy

    Ndarray

    import numpy as np
    
    ar = np.array([1,2,3,4,5])
    print(ar)
    print([1,2,3,4,5])
    print(ar.ndim)
    print(ar.shape)
    print(ar.size)
    print(ar.dtype)
    print(ar.itemsize)

     创建数组: array()函数,列表,元组,数组,生成器,序列

    arr1 = np.array(range(10))
    arr2 = np.array([1,2,3,4,5.5])
    arr3 = np.array([[1,2,3,4],[5,6,7,8]])
    print(arr3)
    print(arr3.ndim)
    print(arr3.shape)

      arange() ,类似于python range()

    np.arange(10)
    np.arange(10.)
    np.arange(1,10,0.1)
    np.arange(10000)

      linspace(): 返回在间隔[开始,停止]上 num个均匀间隔的样本

    np.linspace(2.0,3.0, num=5)
    np.linspace(2.0, 3.0, num=5, endpoint=False)
    np.linspace(2.0,3.0, num=5,  retstep=True)

    zeros()/zeros_like()/ones()/ones_like()

    numpy.zeros(shape, dtype=float, order='C'):返回给定形状和类型的新数组,用零填充。

    np.zeros(5)
    np.zeros((2,3,2), dtype=np.int)
    arr1 = np.array([[1,2,3],[4,5,6]])
    np.zeros_like(arr1)
    np.ones(6)
    

      

     # eye()
    # 正方形的N*N的单位矩阵,对角线为1,其余为0

    np.eye(5)

     

    numpy 通用函数
    基本操作

    # 数组形状 .T/.reshape()/.resize()
    # 转置 (2, 5) -> (5, 2)

    arr1 = np.arange(10)
    arr2 = np.ones((5,2))
    arr3 = np.array([[1,2,3],[4,5,6]])
    
    print(arr1,arr1.T)
    print('_______')
    print(arr2)
    print(arr2.T)
    print('______')
    print(arr3)
    print(arr3.T)
    

      

    arr2.reshape((10,))
    # reshape只提供形状的改变,元素数量保持一致
    arr4 = np.resize(arr2, (3,5))
    print(np.arange(1,13).reshape(3,4))
    np.resize(np.arange(1,13).reshape(3,4), (3,5))
    # np.resize 改变形状,如果元素不够,重复填充
    # 数组的复制
    arr1 = np.arange(10)
    arr2 = arr1
    arr1 is arr2
    arr3 = arr1.copy()
    arr1 is arr3
    # copy 复制一个副本
    # .T, reshape,resize 返回一个新的数组
    

      

    # 数组类型转换 .astype()  默认返回一个新的数组
    ar1 = np.arange(10, dtype=np.float)
    ar1.astype(np.int32)
    

      

    # 数组的堆叠
    a1 = np.arange(5)
    a2 = np.arange(4)
    # print(a1.shape, a2.shape)
    # 水平堆叠
    np.hstack((a1, a2))   # 水平堆叠时,行数要一致
    
    ar1 = np.arange(12).reshape((3,4))
    ar2 = np.arange(15).reshape((3,5))
    np.hstack((ar1, ar2))
    
    # 垂直堆叠
    # np.vstack()  # 垂直堆叠,列数要一致
    # np.stack() 通过指定哪个维度,哪个轴
    # help(np.stack)
    ar1 = np.arange(12).reshape((3,4))
    ar2 = np.ones((3,4))
    print(ar1)
    print(ar2)
    np.stack((ar1,ar2),axis=0).ndim

    # 数组的拆分
    ar = np.arange(16).reshape(4,4)
    print(ar)
    # 水平拆分 按列拆
    ars = np.hsplit(ar,2)
    #print(ars)
    #print(ars[0])
    #print(ars[1])
    # 垂直拆分,按行拆
    
    ars = np.vsplit(ar,4)
    print(ars)
    print(ars[0])
    print(ars[1])

    # 简单的运算
    # 矢量化
    ar = np.arange(12).reshape(3,4)
    # 与标量的运算
    # print(ar)
    # print(ar+1)
    # print(ar*2)
    # print(1/(ar+1))
    # print(ar**0.5)
    # 常用的统计函数
    print(ar.mean())  # 求平均值
    print(ar.max())  # 求最大值
    print(ar.min())  # 求最小值
    print(ar.std())  # 求标准差
    print(ar.var())  # 求方差
    
    # 可以在不同维度上进行操作
    print(ar)
    np.sum(ar, axis=0)
    np.sum(ar, axis=1)
    np.sort(np.array([4,3,2,1]))

     numpy 索引和切片

    # 基本索引
    ar = np.arange(20)
    # print(ar)
    # print(ar[4])
    # print(ar[:3])
    # 一维的
    ar = np.arange(16).reshape(4,4)
    print(ar)
    # print(ar[0])  # 切出一行  切片为下一个维度的一个元素
    # print(ar[0][-1]) # 二次索引,得到一维中的一个值
    print(ar[:3])  # 切出多行,
    print(ar[1,1]) # 类似于二次索引
    print(ar[:2, 1:])
    # 二维的

    #  布尔型索引
    ar = np.arange(12).reshape(3,4)
    i = np.array([True, False, True])
    j = np.array([False, True, False, True])
    # print(ar)
    # print(i)
    # print(j)
    # print(ar[i])
    # print(ar[i,:])  # 选行
    # print(ar[:, j])   # 选列
    # 基本的布尔型索引
    ai = ar > 5   
    print(ar)
    print(ai)
    print(ar[ar % 2 != 0])  # 选取所有的奇数
    print(ar[i,j])

     numpy 随机数

    numpy.random

    # 生成
    samples = np.random.normal(size=(4,4)) # 符合标准正态分布的4*4样本值
    print(samples)

    #  numpy.random.rand() :  [0, 1) 之间的随机样本或N维浮点数组 ---均匀分布
    import matplotlib.pyplot as plt
    
    a = np.random.rand()
    b = np.random.rand(4)
    c = np.random.rand(3,4)
    s1 = np.random.rand(1000)
    s2 = np.random.rand(1000)
    plt.scatter(s1, s2)
    plt.show()

    # numpy.random.randn() :生成一个浮点数或者N维的浮点数组---正态分布
    s1 = np.random.randn(1000)
    s2 = np.random.randn(1000)
    plt.scatter(s1, s2)
    plt.show()
    
    

    # numpy.random.randint(low, high=None, size=None, dtype='l'): 生成一个整数或者N维的整数数组
    # 若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数,且high必须大于low 
    # dtype参数:只能是int类型  
    np.random.randint(2)
    np.random.randint(2, 6, size=5)
    np.random.randint(1,100, size=[3,5])

     numpy的输入输出
    读写数组数据,文本数据

    # 二进制文件
    # 存数据
    import numpy as np
    ar = np.random.rand(5,5)
    np.save('test.npy',ar)
    np.load('test.npy')
    
    

    # 文本数据
    #
    np.savetxt('test.txt', ar, delimiter=',')
    # 读取
    np.loadtxt('test.txt', delimiter=',')

  • 相关阅读:
    STM32的备份寄存器测试
    dsp6657的helloworld例程测试-第一篇
    Dennis Gabor与全息摄影
    Gabor filter与Gabor transform
    图像生成器:让电脑学习生成数字图像
    Haar-like feature和Haar wavelet
    《Wonderland: A Novel Abstraction-Based Out-Of-Core Graph Processing System》章明星
    小波分析及其应用
    Discrete cosine transform(离散余弦转换)
    psimpl_v7_win32_demo
  • 原文地址:https://www.cnblogs.com/zhujiongning/p/11736279.html
Copyright © 2011-2022 走看看