固定内存地址的Numpy环形缓冲区,允许显著加快Numpy、sigpy、numba和pyFFTW计算速度。

dvg-ringbuffer的Python项目详细描述


https://img.shields.io/pypi/v/dvg-ringbufferhttps://img.shields.io/pypi/pyversions/dvg-ringbufferhttps://travis-ci.org/Dennis-van-Gils/python-dvg-ringbuffer.svg?branch=masterhttps://coveralls.io/repos/github/Dennis-van-Gils/python-dvg-ringbuffer/badge.svg?branch=masterRequirements Statushttps://img.shields.io/badge/code%20style-black-000000.svghttps://img.shields.io/badge/License-MIT-purple.svg

DvG U环形缓冲器

{emmpy内存在^emmpy}显著地允许内存小于emmpy} 加速numpysigpynumba&;pyFFTW计算。在

安装:

^{tt5}$

基于:

https://pypi.org/project/numpy_ringbuffer/ by Eric Wieser.

^{tt6}$ can be used as a drop-in replacement for ^{tt7}$ and provides several optimizations and extra features, but requires Python 3.

当且仅当环形缓冲区完全满时,它才会返回其数组 以单个固定内存地址作为连续C样式numpy数组的数据 环形缓冲区实例。它是通过打开不连续的环形缓冲器来实现的 数组放入第二个额外的unwrap缓冲区,该缓冲区是环的私有成员 缓冲区类。这有利于其他加速计算,例如:。, numpysigpynumba&;pyFFTW,它们可以从中受益 连续数组每次都在同一内存地址,这样编译器 优化和数据规划成为可能。在

当环形缓冲区未完全满时,它将以 连续的C样式numpy数组,但位于不同的内存地址。这是怎么回事 原始的numpy-buffer始终运行。在

通常,collections.deque()用作环形缓冲区。这个 deque的好处是对大多数人来说,它是线程安全且速度(足够)的 情况。然而,每当deque时都会有一个开销,比如 容器–需要转换为numpy数组。因为 DvG_RingBuffer已经返回numpy数组,它的性能将优于 collections.deque()容易,测试为~60的因子。在

警告

  • 此环形缓冲区不是线程安全的。你必须实现你自己的 在多线程操作中使用此环形缓冲区时,互斥锁。在
  • 一个完整的环形缓冲区返回的数据数组是一个传递函数 unwrap缓冲区的引用。这不是复制品!因此,改变 返回数据数组中的值与更改 unwrap缓冲区。在

RingBuffer(capacity, dtype=np.float64, allow_overwrite=True)

Create a new ring buffer with the given capacity and element type.

Args:
capacity (^{tt17}$):
The maximum capacity of the ring buffer
dtype (^{tt18}$, optional):

Desired type of buffer elements. Use a type like ^{tt19}$ to produce a buffer with shape ^{tt20}$.

Default: ^{tt21}$

allow_overwrite (^{tt22}$, optional):

If ^{tt23}$, throw an IndexError when trying to append to an already full buffer.

Default: ^{tt24}$

方法

  • clear()

  • append(value)

    向环形缓冲区追加一个值。在

    rb=RingBuffer(3,dtype=np.int)#  []rb.append(1)#  [1]rb.append(2)#  [1, 2]rb.append(3)#  [1, 2, 3]rb.append(4)#  [2, 3, 4]
  • appendleft(value)

    从左侧向环形缓冲区追加一个值。在

    ^{pr2}$
  • extend(values)

    使用值列表扩展环形缓冲区。在

    rb=RingBuffer(3,dtype=np.int)#  []rb.extend([1])#  [1]rb.extend([2,3])#  [1, 2, 3]rb.extend([4,5,6,7])#  [5, 6, 7]
  • extendleft(values)

    使用左侧的值列表扩展环形缓冲区。在

    rb=RingBuffer(3,dtype=np.int)#  []rb.extendleft([1])#  [1]rb.extendleft([3,2])#  [3, 2, 1]rb.extendleft([7,6,5,4])#  [7, 6, 5]
  • pop()

    从环形缓冲区中移除最右边的项并将其返回。在

  • popleft()

    从环形缓冲区中移除最左边的项并将其返回。在

属性

  • is_full
  • unwrap_address
  • current_address
  • dtype
  • shape
  • maxlen

索引和切片

  • [],包括负指数和切片

    fromdvg_ringbufferimportRingBufferrb=RingBuffer(4,dtype=np.int)# --> rb[:] = array([], dtype=int32)rb.extend([1,2,3,4,5])# --> rb[:] = array([2, 3, 4, 5])x=rb[0]# --> x = 2x=rb[-1]# --> x = 5x=rb[:3]# --> x = array([2, 3, 4])x=rb[np.array([0,2,-1])]# --> x = array([2, 4, 5])rb=RingBuffer(5,dtype=(np.int,2))# --> rb[:] = array([], shape=(0, 2), dtype=int32)rb.append([1,2])# --> rb[:] = array([[1, 2]])rb.append([3,4])# --> rb[:] = array([[1, 2], [3, 4]])rb.append([5,6])# --> rb[:] = array([[1, 2], [3, 4], [5, 6]])x=rb[0]# --> x = array([1, 2])x=rb[0,:]# --> x = array([1, 2])x=rb[:,0]# --> x = array([1, 3, 5])

变更日志

1.0.1(2020-07-21)

  • 更新的文档

1.0.0(2020-07-21)

  • 关于PyPI的第一次发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
无法从Java将布尔首选项存储到Windows 10注册表,而整数和字符串已正确存储   用户界面如何更改Java中GUI的颜色,例如spotify将其桌面应用程序设置为黑色/灰色?   如何使用流API从java中的对象列表中删除重复项   命令行需要终止运行时启动的Java程序。getRuntime()。行政长官()   消费者线程和生产者线程中的java等待和通知   Scala泛型和装箱带来的Java互操作性问题   ApacheSpark中使用朴素贝叶斯的java Twitter情绪分析   java解释vs.编译vs.后期绑定   junit测试运行时java模拟物理web服务器   java我可以为ViewPager中片段的进入和退出提供不同的动画吗?   java什么是“PDF”领域当前开发的好来源?   表示5分钟前的时间戳的java标准表达式   windows 7如何在Java中获得双击或执行的正确路径?   Java随机:种子问题   什么是带美元符号和数字的java文件名。类(名称$1.class)?   java检查表中是否已经存在列   最终{}中的java捕获异常?必须   在Android studio中创建JPA模型Google应用程序引擎(GAE)时发生java错误