相关疑难解决方法(0)

JavaScript中的循环缓冲区

有人已经在JavaScript中实现了循环缓冲区吗?没有指针你会怎么做?

javascript circular-buffer data-structures

36
推荐指数
4
解决办法
3万
查看次数

反序列化消息而不将整个文件加载到内存中?

我正在使用 Google Protocol Buffers 和 Python 来解码一些大数据文件——每个文件 200MB。我下面有一些代码展示了如何解码分隔流,它工作得很好。然而,它使用read()将整个文件加载到内存中然后迭代它的命令。

import feed_pb2 as sfeed
import sys
from google.protobuf.internal.encoder import _VarintBytes
from google.protobuf.internal.decoder import _DecodeVarint32

with open('/home/working/data/feed.pb', 'rb') as f:
    buf = f.read() ## PROBLEM-LOADS ENTIRE FILE TO MEMORY.
    n = 0
    while n < len(buf):
        msg_len, new_pos = _DecodeVarint32(buf, n)
        n = new_pos
        msg_buf = buf[n:n+msg_len]
        n += msg_len
        read_row = sfeed.standard_feed()
        read_row.ParseFromString(msg_buf)
        # do something with read_metric
        print(read_row)
Run Code Online (Sandbox Code Playgroud)

请注意,此代码来自另一篇 SO 帖子,但我不记得确切的网址。我想知道是否有readlines()协议缓冲区的等效项允许我一次读取一条分隔消息并对其进行解码?我基本上想要一个不受 RAM 限制的管道,我必须加载文件。

似乎有一个pystream-protobuf包支持其中一些功能,但它已经有一两年没有更新了。7年前的帖子也问过类似的问题。但我想知道从那以后是否有任何新信息。

从流中读取多个 …

python protocol-buffers

6
推荐指数
1
解决办法
1617
查看次数

如何在numpy数组形状(n,)或(n,1)中旋转数字?

说我有一个numpy数组:

>>> a 
array([0,1,2,3,4])
Run Code Online (Sandbox Code Playgroud)

我想"旋转"它得到:

>>> b
array([4,0,1,2,3])
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法?

我一直在转换到一个双端队列并且回来(见下文)但是有更好的方法吗?

b = deque(a)
b.rotate(1)
b = np.array(b)
Run Code Online (Sandbox Code Playgroud)

python numpy

2
推荐指数
1
解决办法
4516
查看次数