zoukankan      html  css  js  c++  java
  • NumPy和deque

    import numpy as np
    
    # 简单操作
    # 1.新建一个0-11的整数的numpy.ndarray,然后把它打印出来
    a = np.arange(12)
    print(a)  # [ 0  1  2  3  4  5  6  7  8  9 10 11]
    print(type(a))  # <class 'numpy.ndarray'>
    
    # 2.看看数组的维度,它是一个一维的,有12个元素的数组
    print(a.shape)  # (12,)
    # 3.把数组变成二维的
    a.shape = 3, 4
    print(a)
    """
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    [ 8  9 10 11]
    """
    # 4.打印出第2行
    print(a[2])  # [ 8  9 10 11]
    # 5.打印出第2行第1列的元素
    print(a[2, 1])  # 9
    print(a[:, 1])  # 把第1列的元素打印出来,[1 5 9]
    # 6.把行和列交换,得到一个新数组
    print(a.transpose())
    """
    [[ 0  4  8]
     [ 1  5  9]
     [ 2  6 10]
     [ 3  7 11]]
    """
    
    # NumPy也可以对numpy.ndarray中的元素进行抽象的读取,保存和其他操作
    
    # 1.从文本文件里读取1000万个浮点数,比较耗时
    floats = np.loadtxt('floats-10M-lines.txt')
    # 2.利用序列切片来读取其中的最后3个数
    print(floats[-3:])  # [0.30815445 0.22208919 0.65914634]
    # 3.把数组里的每个数都乘以0.5,再来看看最后3个数
    floats *= .5
    print(floats[-3:])  # [0.15407723 0.1110446  0.32957317]
    # 4.导入高精度计时器
    from time import perf_counter as pc
    
    # 5.把每个元素都乘以3,可以看到处理1000万个浮点数所需的时间不足20毫秒
    t0 = pc()
    floats /= 3
    print(pc() - t0)  # 0.0106946
    
    # 6.把数组存入后缀为.npy的二进制文件,速度比较快
    np.save('floats-10M', floats)
    # 7.将上面的数据导入到另外一个数组里,这次load方法利用了一种叫做内存映射的机制,它让我们在内存不足的情况下仍然可以对数组做切片
    floats2 = np.load('floats-10m.npy', 'r+')
    # 8.把数组里每个数乘以6之后,再看一下数组的最后3个数
    floats2 *= 6
    print(floats2[-3:])  # [0.30815445 0.22208919 0.65914634]
    
    # 双向队列和其他形式的队列
    
    # 利用.append和.pop方法,我们可以把列表当作栈或者队列来使用.但是删除列表的第一个元素,或者是在第一个元素之前添加一个元素之类的操作是很耗时的,
    # 因为这些操作会牵扯到移动列表里的所有元素.
    
    # collections.deque类(双端队列)是一个线程安全,可以快速从两端添加或者删除元素的数据类型
    
    from collections import deque
    
    # 1.maxlen是一个可选参数,代表这个队列可以容纳的元素的数量,而且一旦设定,这个属性就不能修改了
    dq = deque(range(10), maxlen=10)
    print(dq)  # deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
    # 2.队列的旋转操作接受一个参数n,当n>0时,队列的最右边的n个元素会被移动到队伍的左边.当n<0时,最左边的n个元素会被移动到右边.
    dq.rotate(3)
    print(dq)  # deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6], maxlen=10)
    dq.rotate(-4)
    print(dq)  # deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], maxlen=10)
    # 3.当试图对一个已满的队列做头部添加操作的时候,它尾部的元素会被删除掉
    dq.appendleft(-1)
    print(dq)  # deque([-1, 1, 2, 3, 4, 5, 6, 7, 8, 9], maxlen=10)
    # 4.在尾部添加3个元素的操作会挤掉-1,1和2
    dq.extend([11, 22, 33])
    print(dq)  # deque([3, 4, 5, 6, 7, 8, 9, 11, 22, 33], maxlen=10)
    # 5.extendleft(iter)方法会把迭代器里的元素逐个添加到双向队列的左边,因此迭代器里的元素会逆序出现在队列里.
    dq.extendleft([10, 20, 30, 40])
    print(dq)  # deque([40, 30, 20, 10, 3, 4, 5, 6, 7, 8], maxlen=10)
    import this
    print(this)
    
  • 相关阅读:
    [北京省选集训2019]生成树计数
    阿里云轻量级服务器的日常操作
    阿里云轻量级服务器上搭建jdk、Tomcat、mysql、zookeeper步骤!!!
    mysql如何记录数据的创建时间和更新时间??
    解决ssm中文乱码问题,上传文件中文乱码的问题
    zookeeper的安装配置问题;
    zookeeper解决启动提示:找不到或者无法加载主类org. apache. zookeeper. server. guorum. QuorumPeerMlain的问题
    《数据采集与网络爬虫》之数据解析
    《数据采集与网络爬虫》环境篇
    《数据采集与网络爬虫》之抓取网页
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/13153273.html
Copyright © 2011-2022 走看看