小编Dou*_*gal的帖子

python中快速,大宽度,非加密的字符串散列

我需要python中的高性能字符串散列函数,它产生至少34位输出的整数(64位有意义,但32位太少).在Stack Overflow上还有其他一些问题,比如这个问题,但是我发现的每一个被接受/赞成的答案都属于几个类别中的一个,这些类别不适用(由于给定的原因).

  • 使用内置hash()功能.这个函数,至少在我正在开发的机器上(使用python 2.7和64位cpu)产生一个适合32位的整数 - 对我来说不够大.
  • 使用hashlib.hashlib提供加密哈希例程,这些例程比非加密目的慢得多.我发现这是不言而喻的,但如果你需要基准和引用来说服你这个事实,那么我可以提供.
  • 使用该string.__hash__()函数作为原型来编写自己的函数.我怀疑这将是正确的方法,除了这个特定函数的效率在于它使用了c_mul函数,它包裹了大约32位 - 再次,太小了我的使用!非常令人沮丧,它非常接近完美!

理想的解决方案具有以下属性,具有相对宽松的重要性.

  1. 输出范围至少延长34位,可能是64位,同时在所有位上保持一致的雪崩属性.(连接32位哈希值往往会违反雪崩属性,至少我的愚蠢的例子.)
  2. 便携.在两台不同的机器上给出相同的输入字符串,我应该两次得到相同的结果.这些值将存储在文件中以供以后重复使用.
  3. 高性能.越快越好,因为在我正在运行的程序执行期间,这个函数大约会被调用大约200亿次(这是目前性能关键的代码.)它不需要用C语言编写,它真的只需要优于md5(在字符串的内置hash()的某个地方).
  4. 接受'扰动'(这里使用的更好的词是什么?)整数作为输入来修改输出.我在下面举了一个例子(列表格式化规则不会让我把它放得更近.)我想这不是100%必要的,因为它可以通过手动扰动函数的输出来模拟,但是把它作为输入给了我一种温暖的感觉.
  5. 完全用Python编写.如果它是绝对的,肯定需要用C语言编写,那么我想可以做到,但是我用python编写的函数比用C语言编写的更快的函数慢了20%,这只是因为使用两种不同语言的项目协调头痛.是的,这是一个警察,但这是一个愿望清单.

'Perturbed'哈希示例,其中哈希值以小整数值n急剧变化

def perturb_hash(key,n):
    return hash((key,n))
Run Code Online (Sandbox Code Playgroud)

最后,如果你很好奇我正在做什么,我需要这样一个特定的哈希函数,我正在完全重写pybloom模块以大大提高它的性能.我成功了(它现在运行速度提高了大约4倍,占用了大约50%的空间)但是我注意到有时如果滤波器变得足够大,它会突然出现假阳性率.我意识到这是因为哈希函数没有解决足够的位数.32位只能解决40亿位(请注意,滤波器地址位而不是字节)和一些我用于基因组数据的滤波器加倍或更多(因此最少34位).

谢谢!

python string hash high-speed-computing

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

在Python中创建临时FIFO(命名管道)?

如何在Python中创建临时FIFO(命名管道)?这应该工作:

import tempfile

temp_file_name = mktemp()
os.mkfifo(temp_file_name)
open(temp_file_name, os.O_WRONLY)
# ... some process, somewhere, will read it ...
Run Code Online (Sandbox Code Playgroud)

但是,由于Python Docs 11.6中的重大警告以及潜在的删除,我犹豫不决,因为它已被弃用.

编辑:值得注意的是,我已尝试tempfile.NamedTemporaryFile(并通过扩展tempfile.mkstemp),但os.mkfifo抛出:

OSError -17:文件已存在

当您在mkstemp/NamedTemporaryFile创建的文件上运行它时.

python security file fifo mkfifo

27
推荐指数
3
解决办法
5万
查看次数

在Flask中使用MySQL

有人可以在Flask中共享有关如何访问MySQL数据库的示例代码吗?有文档显示如何连接到sqlite而不是MySQL.

非常感谢你提前

python mysql web-services flask

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

在osx上使用numpy的lapack_lite和多处理的段错误,而不是linux

以下测试代码在OSX 10.7.3上为我提供了段错误,但不包括其他机器:

from __future__ import print_function

import numpy as np
import multiprocessing as mp
import scipy.linalg

def f(a):
    print("about to call")

    ### these all cause crashes
    sign, x = np.linalg.slogdet(a)
    #x = np.linalg.det(a)
    #x = np.linalg.inv(a).sum()

    ### these are all fine
    #x = scipy.linalg.expm3(a).sum()
    #x = np.dot(a, a.T).sum()

    print("result:", x)
    return x

def call_proc(a):
    print("\ncalling with multiprocessing")
    p = mp.Process(target=f, args=(a,))
    p.start()
    p.join()


if __name__ == '__main__':
    import sys
    n = int(sys.argv[1]) if len(sys.argv) > 1 else 50

    a = …
Run Code Online (Sandbox Code Playgroud)

python numpy multiprocessing segmentation-fault

12
推荐指数
1
解决办法
1546
查看次数

如何将<br>和<p>转换为换行符?

假设我的内部有HTML <p><br>标签.然后,我将剥离HTML来清理标签.如何将它们变成换行符?

我正在使用Python的BeautifulSoup库,如果这有帮助的话.

html python regex xml

12
推荐指数
4
解决办法
8829
查看次数

Baum-Welch的实施示例

我正在尝试学习Baum-Welch算法(与隐马尔可夫模型一起使用).我理解前向 - 后向模型的基本理论,但有人帮助用一些代码解释它会很好(我发现读代码更容易,因为我可以玩它来理解它).我检查了github和bitbucket并没有找到任何容易理解的东西.

网上有许多HMM教程,但概率已经提供,或者在拼写检查器的情况下,添加单词的出现以制作模型.如果某人有仅使用观察结果创建Baum-Welch模型的例子,那将会很酷.例如,如果您只有:http://en.wikipedia.org/wiki/Hidden_​​Markov_model#A_concrete_example:

states = ('Rainy', 'Sunny')

observations = ('walk', 'shop', 'clean')
Run Code Online (Sandbox Code Playgroud)

这只是一个例子,我认为任何解释它的例子,我们可以更好地理解,这是很好的.我有一个特定的问题,我试图解决,但我认为显示人们可以学习并适用于他们自己的问题的代码可能更有价值(如果它不可接受,我可以发布我自己的问题).如果可能的话,在python(或java)中使用它会很不错.

提前致谢!

python java algorithm statistics machine-learning

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

IOError:[Errno 22]读/写大字节串时的参数无效

我越来越

IOError: [Errno 22] Invalid argument
Run Code Online (Sandbox Code Playgroud)

当我尝试将大字节字符串写入磁盘时f.write(),其中f以模式打开wb.

我在网上看到很多人在使用Windows网络驱动器时遇到此错误,但是我在OSX上(当我最初提问时为10.7,但现在是10.8,使用标准的HFS +本地文件系统).我正在使用Python 3.2.2(发生在python.org二进制文件和自制软件安装).我没有看到系统Python 2.7.2的这个问题.

我也试过w+b基于这个Windows bug解决方法的模式,但当然这没有用.

数据来自一个大的numpy数组(几乎4GB的浮点数).如果我手动循环字符串并以块的形式写出它,它工作正常.但是因为我不能一次性写出所有内容np.savenp.savez失败 - 因为他们只是使用了f.write(ary.tostring()).当我尝试将其保存到现有的HDF5文件时,我收到类似的错误h5py.

请注意,在阅读打开的文件时遇到同样的问题file(filename, 'rb'):f.read()给出这个IOError,同时f.read(chunk_size)为了合理的chunk_size工作.

有什么想法吗?

python macos python-3.x

11
推荐指数
1
解决办法
9965
查看次数

numpy矩阵欺骗 - 逆矩阵和的总和

我正在尝试执行以下操作,并重复直到收敛:

每个X i的位置n x p,并且r它们在一个r x n x p名为的数组中samples.Un x n,Vp x p.(我得到了矩阵正态分布的MLE .)大小都是潜在的大小; 我期待至少东西的顺序上 r = 200,n = 1000,p = 1000.

我目前的代码

V = np.einsum('aji,jk,akl->il', samples, np.linalg.inv(U) / (r*n), samples)
U = np.einsum('aij,jk,alk->il', samples, np.linalg.inv(V) / (r*p), samples)
Run Code Online (Sandbox Code Playgroud)

这没关系,但当然你永远不应该真正找到它的反向和乘法.如果我能以某种方式利用U和V是对称和正定的事实,那也是好的.我希望能够在迭代中计算出U和V的Cholesky因子,但由于总和,我不知道如何做到这一点.

做一些类似的东西,我可以避免逆转

V = sum(np.dot(x.T, scipy.linalg.solve(A, x)) for x in samples)
Run Code Online (Sandbox Code Playgroud)

(或类似于利用psd-ness的东西),但随后有一个Python循环,这使得那些笨拙的仙女哭了.

我还可以想象samples以这样一种方式重塑:我可以为每一个A^-1 x …

python numpy linear-algebra scipy

11
推荐指数
1
解决办法
1148
查看次数

在固定的元素集上生成某个等级的"随机"矩阵

我想生成大小为mx n和等级的矩阵r,元素来自指定的有限集,例如{0,1}{1,2,3,4,5}.我希望它们在某个非常松散的意义上是"随机的",即我希望从算法获得各种可能的输出,其分布模糊地类似于具有指定等级的那组元素上的所有矩阵的分布.

事实上,我实际上并不关心它是否具有等级r,只是它接近于等级矩阵r(由Frobenius规范测量).

当设置在手是实数,我已经执行以下操作,这是完全足够我需要:生成矩阵U尺寸的mX rVnX r,从例如普通独立地采样元件(0,2).然后U V'是一个排名的mx n矩阵r(好吧<= r,但我认为这很有r可能).

如果我只是这样做然后舍入到二进制/ 1-5,则等级增加.

通过进行SVD​​并获取第一个r奇异值,也可以得到矩阵的低秩近似.但是,这些值不会出现在所需的集合中,并且对它们进行舍入将再次提高等级.

这个问题是相关的,但接受的答案不是"随机的",另一个答案表明SVD,这在这里不起作用.

我想过的一种可能性是,使r从集线性无关的行或列向量,然后通过这些的线性组合获得其矩阵的其余部分.但是,我不是很清楚如何获得"随机"线性独立向量,或者如何在此之后以准随机方式组合它们.

(并不是说这是超级相关的,但我是在numpy中这样做.)


更新:我在评论中尝试了EMS建议的方法,这个简单的实现:

real = np.dot(np.random.normal(0, 1, (10, 3)), np.random.normal(0, 1, (3, 10)))
bin = (real > .5).astype(int)
rank = np.linalg.matrix_rank(bin)
niter = 0

while …
Run Code Online (Sandbox Code Playgroud)

python math matlab numpy linear-algebra

8
推荐指数
1
解决办法
3175
查看次数

我们能以多快的速度制作特定的tr?

我不得不用另一个字符(我任意选择@)替换文件中的所有空字节,并且非常惊讶,tr '\00' '@'大约是速度的1/4 gzip:

$ pv < lawl | gzip > /dev/null
^C13MiB 0:00:04 [28.5MiB/s] [====>                             ] 17% ETA 0:00:18
$ pv < lawl | tr '\00' '@' > /dev/null
^C58MiB 0:00:08 [7.28MiB/s] [==>                               ]  9% ETA 0:01:20
Run Code Online (Sandbox Code Playgroud)

我的真实数据文件是3GB gzip压缩,耗时50分钟tr,我实际上需要在许多这样的文件上执行此操作,因此这不是一个完全学术问题.请注意,从磁盘读取(这里pv是一个相当快的SSD),或者,在任何一种情况下都不是瓶颈; 双方gziptr使用100%的CPU,并且cat速度要快得多:

$ pv < lawl | cat > /dev/null
 642MiB 0:00:00 [1.01GiB/s] [================================>] 100%
Run Code Online (Sandbox Code Playgroud)

这段代码:

#include <stdio.h>

int main() {
    int ch;
    while ((ch = …
Run Code Online (Sandbox Code Playgroud)

c io performance

7
推荐指数
1
解决办法
130
查看次数