小编gab*_*ous的帖子

勘误(删除+错误)Berlekamp-Massey for Reed-Solomon解码

我试图在Python中实现一个Reed-Solomon编码器解码器,支持解码擦除和错误,这让我发疯.

该实现目前仅支持解码错误或仅解码,但不能同时解码两者(即使它低于2*错误+删除的理论界限<=(nk)).

从Blahut的论文(这里这里),似乎我们只需要用擦除定位多项式初始化错误定位多项式,以隐式计算Berlekamp-Massey内的勘误定位多项式.

这种方法部分适用于我:当我有2*错误+删除<(nk)/ 2时它可以工作,但事实上在调试之后它只能起作用,因为BM计算错误定位多项式,它获得与擦除定位多项式完全相同的值(因为我们低于仅错误校正的限制),因此它被galois字段截断,我们最终得到了擦除定位多项式的正确值(至少我理解它的方式,我可能是错的).

然而,当我们超过(nk)/ 2时,例如如果n = 20且k = 11,那么我们有(nk)= 9个擦除的符号我们可以纠正,如果我们输入5个擦除然后BM就会出错.如果我们输入4个擦除+ 1个错误(我们仍然远低于界限,因为我们有2*错误+删除+ 2 + 4 = 6 <9),BM仍然出错.

我实现的Berlekamp-Massey的精确算法可以在本演示文稿中找到(第15-17页),但是在这里这里可以找到非常相似的描述,这里我附上了数学描述的副本:

Berlekamp-Massey算法

现在,我将这个数学算法几乎完全复制到Python代码中.我想要的是扩展它以支持擦除,我尝试通过使用擦除定位器初始化错误定位器sigma:

def _berlekamp_massey(self, s, k=None, erasures_loc=None):
    '''Computes and returns the error locator polynomial (sigma) and the
    error evaluator polynomial (omega).
    If the erasures locator is specified, we will return an errors-and-erasures locator polynomial and an errors-and-erasures evaluator polynomial.
    The parameter s is the syndrome polynomial (syndromes encoded in …
Run Code Online (Sandbox Code Playgroud)

python math error-correction reed-solomon galois-field

25
推荐指数
1
解决办法
1991
查看次数

优化reed-solomon编码器(多项式除法)

我正在尝试优化Reed-Solomon编码器,这实际上只是对Galois Fields 2 ^ 8的多项式除法运算(这意味着值环绕超过255).事实上,代码与Go中的代码非常相似:http://research.swtch.com/field

这里使用的多项式除法算法是合成除法(也称为Horner方法).

我尝试了一切:numpy,pypy,cython.我得到的最佳性能是使用pypy和这个简单的嵌套循环:

def rsenc(msg_in, nsym, gen):
    '''Reed-Solomon encoding using polynomial division, better explained at http://research.swtch.com/field'''
    msg_out = bytearray(msg_in) + bytearray(len(gen)-1)
    lgen = bytearray([gf_log[gen[j]] for j in xrange(len(gen))])

    for i in xrange(len(msg_in)):
        coef = msg_out[i]
        # coef = gf_mul(msg_out[i], gf_inverse(gen[0]))  // for general polynomial division (when polynomials are non-monic), we need to compute: coef = msg_out[i] / gen[0]
        if coef != 0: # coef 0 is normally undefined so we manage …
Run Code Online (Sandbox Code Playgroud)

python optimization pypy numpy cython

21
推荐指数
3
解决办法
1788
查看次数

matlab/octave - 广义矩阵乘法

我想做一个函数来推广矩阵乘法.基本上,它应该能够进行标准矩阵乘法,但它应该允许通过任何其他函数更改两个二元运算符product/sum.

目标是在CPU和内存方面尽可能高效.当然,它总是比A*B效率低,但操作员的灵活性才是最重要的.

以下是我在阅读各种 有趣 线程后可以提出的一些命令:

A = randi(10, 2, 3);
B = randi(10, 3, 4);

% 1st method
C = sum(bsxfun(@mtimes, permute(A,[1 3 2]),permute(B,[3 2 1])), 3)
% Alternative: C = bsxfun(@(a,b) mtimes(a',b), A', permute(B, [1 3 2]))

% 2nd method
C = sum(bsxfun(@(a,b) a*b, permute(A,[1 3 2]),permute(B,[3 2 1])), 3)

% 3rd method (Octave-only)
C = sum(permute(A, [1 3 2]) .* permute(B, [3 2 1]), 3)

% 4th method (Octave-only): multiply nxm A with nx1xd B to …
Run Code Online (Sandbox Code Playgroud)

matlab matrix octave matrix-multiplication

10
推荐指数
1
解决办法
1785
查看次数

从乱码PDF中提取文本

我有一个PDF文件,其中包含有价值的文字信息.

问题是我无法提取文本,我得到的只是一堆乱码.如果我将PDF阅读器中的文本复制并粘贴到文本文件中,也会发生同样的情况.即使文件 - >在Acrobat Reader中另存为文本也会失败.

我已经使用了所有可以拿到的工具,结果是一样的.我相信这与字体嵌入有关,但我不知道到底是什么?

我的问题:

  • 这个奇怪的文字拼写的罪魁祸首什么
  • 如何从PDF中提取文本内容(以编程方式,使用工具,直接操作位等)?
  • 如何修复PDF不复制副本?

pdf file-format text-analysis

9
推荐指数
2
解决办法
4万
查看次数

如何从CSV文件中读取pandas系列

我有一个CSV文件格式如下:

somefeature,anotherfeature,f3,f4,f5,f6,f7,lastfeature
0,0,0,1,1,2,4,5
Run Code Online (Sandbox Code Playgroud)

我尝试将其视为熊猫系列(使用Python 2.7的pandas每日快照).我尝试了以下方法:

import pandas as pd
types = pd.Series.from_csv('csvfile.txt', index_col=False, header=0)
Run Code Online (Sandbox Code Playgroud)

和:

types = pd.read_csv('csvfile.txt', index_col=False, header=0, squeeze=True)
Run Code Online (Sandbox Code Playgroud)

但两者都不起作用:第一个产生随机结果,第二个只是导入DataFrame而不会挤压.

看起来像pandas只能识别为系列格式如下的CSV格式:

f1, value
f2, value2
f3, value3
Run Code Online (Sandbox Code Playgroud)

但是当功能键位于第一行而不是列时,pandas不想挤压它.

我还能尝试别的吗?这种行为是有意的吗?

csv series pandas

8
推荐指数
2
解决办法
5万
查看次数

Tornado异步调用函数

我正在使用Python + Tornado创建一个Web应用程序,它基本上为用户提供文件.我没有数据库.

如果文件可用,则直接拾取和提供文件,如果没有,则立即生成.

我希望以异步方式提供客户端,因为某些文件可能已经可用,而其他文件需要生成(因此需要等待,我不希望它们阻止其他用户).

我有一个管理文件选择或生成的类,我只需要从Tornado调用它.

实现这一目标的最佳方法(在CPU和RAM上最有效)是什么?我应该使用线程吗?一个子流程?一个简单的gen.Task喜欢这个吗?

另外,我希望我的实现能够在Google App Engines上运行(我认为它们不允许生成子流程吗?).

我对异步Web服务比较新,所以欢迎任何帮助.

python asynchronous class function tornado

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

发送带有源端口但不绑定的 UDP 数据包

我想在 Python 中发送 UDP 数据包并指定源端口但不绑定。

与 hping3 等效:

hping3 -s $sourceport -p $remoteport --udp --file message.bin -d 1024 -c 1 $remoteaddr
Run Code Online (Sandbox Code Playgroud)

我尝试过做这样的事情:

hping3 -s $sourceport -p $remoteport --udp --file message.bin -d 1024 -c 1 $remoteaddr
Run Code Online (Sandbox Code Playgroud)

当然,Python 会尝试绑定,但它不起作用。现在如果我不绑定,我可以这样做:

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

s.bind((SHOST, SPORT))
Run Code Online (Sandbox Code Playgroud)

消息已发送,但现在源端口未定义。

有人有想法吗?

编辑:扩展描述:我的 python 脚本补充了另一个应用程序,该应用程序是绑定到定义端口(1024 以上)的 UDP 服务器。我的脚本只需要将 UDP 数据包发送到远程服务器,但使用与本地 UDP 服务器相同的源端口,以便远程 UDP 服务器认为本地 UDP 服务器是数据包的作者,并将继续使用它进行传输。

我想我还必须说,这是一个完全合法的应用程序,与任何黑客攻击完全无关(事实上,它已经可以与 hping3 一起使用,但我想删除这种依赖关系)。

编辑2 :解决方案在Nos的答案下面的评论中:

使用 pyip python 包并创建一个原始套接字。不要忘记是 root,因为只有 root 才能发送原始数据包(这不是 Python 的限制,而是操作系统的限制,这是为了防止安全问题,因此要以用户身份发送原始数据包,您需要调整操作系统配置)。

python sockets port udp

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

用于快速多项式除法的fft除法

我正在尝试使用快速傅立叶变换(fft)实现快速多项式除法.

这是我到目前为止所得到的:

from numpy.fft import fft, ifft
def fft_div(C1, C2):
    # fft expects right-most for significant coefficients
    C1 = C1[::-1]
    C2 = C2[::-1]
    d = len(C1)+len(C2)-1
    c1 = fft(list(C1) + [0] * (d-len(C1)))
    c2 = fft(list(C2) + [0] * (d-len(C2)))
    res = list(ifft(c1-c2)[:d].real)
    # Reorder back to left-most and round to integer
    return [int(round(x)) for x in res[::-1]]
Run Code Online (Sandbox Code Playgroud)

这适用于相同长度的多项式,但如果长度不同则结果是错误的(我对RosettaCode的 extended_synthetic_division()函数进行基准测试):

# Most signficant coefficient is left
N = [1, -11, 0, -22, 1]
D = [1, -3, 0, …
Run Code Online (Sandbox Code Playgroud)

python fft polynomial-math ifft

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

调用函数时的Pandas,大数据,HDF表和内存使用情况

简短的问题

当Pandas在HDFStore上工作时(例如:.mean()或.apply()),它是否将内存中的完整数据作为DataFrame加载,还是作为Serie逐个记录处理?

详细描述

我必须处理大数据文件,我可以指定数据文件的输出格式.

我打算使用Pandas处理数据,我想设置最佳格式,以便最大化性能.

我已经看到panda.read_table()已经走了很长一段路,但它仍然至少需要与我们想要读取的原始文件大小一样多的内存(实际上至少是内存的两倍)才能转换为DataFrame .这可能适用于高达1 GB但高于1 GB的文件?这可能很难,特别是在在线共享机器上.

但是,我已经看到,现在Pandas似乎支持使用pytables的HDF表.

我的问题是:当我们在整个HDF表上进行操作时,Pandas如何管理内存?例如.mean()或.apply().它是首先在DataFrame中加载整个表,还是直接从HDF文件处理数据而不存储在内存中?

问题:磁盘使用情况下hdf5格式是否紧凑?我的意思是,它像xml一样冗长或更像JSON吗?(我知道有索引和东西,但我在这里对数据的简单描述感兴趣)

memory hdf5 large-data pandas

5
推荐指数
1
解决办法
3519
查看次数

Ctypes:无法导入windll

我在 Windows 7 64 位上运行 Python 2.7 32 位(Anaconda)。

我想使用 ctypes 进行 win32 API 调用,但我有一个非常奇怪的问题:我可以import ctypes,但不能import ctypes.windll,我收到以下错误:

ImportError: No module named windll
Run Code Online (Sandbox Code Playgroud)

我已经爬行了网络,但是我没有找到任何与我的问题类似的内容(要么是根本无法导入ctypes,要么是您尝试导入的DLL中存在错误)。

有人知道我做错了什么吗?

python ctypes

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