小编Anu*_*ush的帖子

读入大文件并制作字典

我有一个大文件,我需要阅读并从中制作字典.我希望这个尽可能快.但是我在python中的代码太慢了.这是一个显示问题的最小示例.

首先制作一些假数据

paste <(seq 20000000) <(seq 2 20000001)  > largefile.txt
Run Code Online (Sandbox Code Playgroud)

现在这里有一段最小的python代码来读取它并制作一本字典.

import sys
from collections import defaultdict
fin = open(sys.argv[1])

dict = defaultdict(list)

for line in fin:
    parts = line.split()
    dict[parts[0]].append(parts[1])
Run Code Online (Sandbox Code Playgroud)

时序:

time ./read.py largefile.txt
real    0m55.746s
Run Code Online (Sandbox Code Playgroud)

但是它不是I/O绑定的:

time cut -f1 largefile.txt > /dev/null    
real    0m1.702s
Run Code Online (Sandbox Code Playgroud)

如果我注释掉这dict条线需要9几秒钟.似乎几乎所有的时间都花在了dict[parts[0]].append(parts[1]).

有什么方法可以加快速度吗?我不介意使用cython甚至C,如果这会产生很大的不同.或者熊猫可以在这帮忙吗?

以下是大小为10000000行的文件的配置文件输出.

python -m cProfile read.py test.data         20000009 function calls in 42.494 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000 …
Run Code Online (Sandbox Code Playgroud)

c python performance cython pandas

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

如何对齐两个数字列表

我有两个排序号码清单A,并BB至少是只要A。说:

A = [1.1, 2.3, 5.6, 5.7, 10.1]
B = [0, 1.9, 2.4, 2.7, 8.4, 9.1, 10.7, 11.8]
Run Code Online (Sandbox Code Playgroud)

我想按保留顺序将每个数字A与另一个数字相关联B。对于任何此类映射,我们将总距离定义为映射数字之间的平方距离之和。

例如:

如果我们将1.1映射到0 0,那么2.3可以映射到1.9以后的任何数字。但是,如果我们已将1.1映射到2.7,则2.3只能从8.4映射到B中的数字。

假设我们映射1.1-> 0、2.3-> 1.9、5.6-> 8.4、5.7-> 9.1、10.1-> 10.7。这是有效的映射,并且具有距离(1.1 ^ 2 + 0.4 ^ 2 + 2.8 ^ 2 + 3.4 ^ 2 + 0.6 ^ 2)。

另一个显示贪婪方法的示例将不起作用:

 A = [1, 2]
 B = [0, 1, 10000]
Run Code Online (Sandbox Code Playgroud)

如果我们映射1-> 1,那么我们必须映射2-> 10000,这很糟糕。

任务是找到具有最小总距离的有效映射。

很难吗?我对列表数不胜数的快速方法感兴趣。

python algorithm

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

如何在 Jupyter Notebook 中添加断点?

在 Jupyter 笔记本中,如果我有

print("hello")
quit()
Run Code Online (Sandbox Code Playgroud)

在第一个单元格和

print("Good bye")
Run Code Online (Sandbox Code Playgroud)

第二,当我执行“全部运行”时,它会打印hello并且还打印Good bye.

换句话说,quit()似乎只停止单元格本身的执行,而不是整个脚本。

有没有办法在代码中添加断点,以便它在到达时停止执行?

python jupyter-notebook

7
推荐指数
4
解决办法
8093
查看次数

在igraph图中添加标题和图例

在igraph for python中,你可以为一个情节添加一个图例和标题吗?就我所见,手册或教程中都没有提到.但是在R中是可能的.

python igraph

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

可以加快查找字符串邻域的代码吗?

给定一个输入字符串,我想找到Levenshtein 距离2内的所有其他字符串的集合。例如,如果输入字符串是“aaa”并且字母表是 ['a', 'b'] 那么我们有:

{'baaa','aab','a','aaaaa','baab','abbaa','abaa','aaabb','abb','aaab','ababa','aa',' aabb','baba','baaab','aabab','aaaab','abaaa','aabaa','bbaaa','abaab','aaaa','baaaa','bab','bba' , 'aba', 'aaaba', 'ba', 'aabba', 'abab', 'baa', 'aaa', 'bbaa', 'baaba', 'aaba', 'abba', 'ab', '巴巴'}

我有代码可以做到这一点,但效率低下。这里它使用所有可打印的 ascii 字符作为字母表和输入字符串aaaaaaaaaa

import string

input_string = "a" * 10
f = (
    lambda input_string, dist=2, i=0: dist * input_string[i - 1 :]
    and {
        k[:i] + char + k[i + w:]
        for k in f(input_string, dist - 1)
        for char in [""] + list(string.printable)
        for w in (0, 1)
    }
    | f(input_string, dist, i …
Run Code Online (Sandbox Code Playgroud)

python algorithm optimization cython

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

泊松过程测试

我想对零假设进行一些测试,即我所拥有的事件的时间是从均匀泊松过程中创建的(参见例如http://en.wikipedia.org/wiki/Poisson_process).因此,对于固定数量的事件,时间应该看起来像是在适当范围内的均匀分布的排序版本.在http://docs.scipy.org/doc/scipy-0.7.x/reference/generated/scipy.stats.kstest.html上有一个Kolmogorov-Smirnov测试的实现,但我看不出如何使用它这里scipy.stats似乎不知道泊松过程.

举个简单的例子,这个样本数据应该为任何这样的测试提供高p值.

import random
nopoints = 100
max = 1000

points = sorted([random.randint(0,max) for j in xrange(nopoints)])
Run Code Online (Sandbox Code Playgroud)

我怎样才能对这个问题进行合理的测试?

来自www.stat.wmich.edu/wang/667/classnotes/pp/pp.pdf我明白了

"备注6.3(TESTING POISSON)"上述定理也可用于检验给定计数过程是泊松过程的假设.这可以通过观察固定时间t的过程来完成.如果在这段时间内我们观察到n如果过程是泊松的,那么无序的发生时间将独立且均匀地分布在(0,t)上.因此,我们可以通过检验n次出现时间来自均匀的假设来测试该过程是否是泊松( 0,t]种群.这可以通过标准统计程序完成,例如Kolmogorov-Smirov检验."

python math statistics scipy

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

多处理给出断言错误:不允许守护进程有孩子

我第一次尝试使用多处理。所以我想我会做一个非常简单的测试示例,它可以分解 100 个不同的数字。

from multiprocessing import Pool
from primefac import factorint
N = 10**30
L = range(N,N + 100)
pool = Pool()
pool.map(factorint, L)
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    pool.map(factorint, L)
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 567, in get
    raise self._value
AssertionError: daemonic processes are not allowed to have children
Run Code Online (Sandbox Code Playgroud)

我看到Python 进程池非守护进程?讨论了这个问题,但我不明白为什么它与我的简单玩具示例相关。我究竟做错了什么?

python python-multiprocessing

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

python中的完全单调插值

我有一些数据,例如:

在此处输入图片说明

我想为它拟合一条可微的单调曲线。我尝试了PchipInterpolator 类,但在一个非常相似的图表上它导致:

在此处输入图片说明

这不是单调的。

如何将单调曲线拟合到这样的数据中?

这是另一个类似图形的一组 y 值示例:

[0.1109157119023644, 0.20187393816931934, 0.14466318670239758, 0.16535159414166822, 0.05452708697483864, 0.2153046237959556, 0.2200300476272603, 0.21012762463269324, 0.15947100322395022, 0.2819691842129948, 0.15567770052985092, 0.24850595803020692, 0.1329341593280457, 0.15595107081606913, 0.3232021121832229, 0.23707961921686588, 0.2415887076540357, 0.32363506549779797, 0.3584089204036798, 0.29232772580068433, 0.22145994836140775, 0.22797587985241133, 0.2717787840603025, 0.3245255944762287, 0.29301098282789195, 0.32417076823344143, 0.3450906550996232, 0.34272097408024904, 0.3868714875012437, 0.41876692320045755, 0.3544198724867363, 0.33073960954801895, 0.3921033666371904, 0.33349050060172974, 0.3608862044547096, 0.37375822841635425, 0.5396399750708429, 0.4209201143798284, 0.42004773793166883, 0.5217725632679073, 0.5911731474218788, 0.43389609315065386, 0.4287288396176006, 0.43007525393257007, 0.5687062142675405, 0.6030811498722173, 0.5292225577714743, 0.47710974351051355, 0.6182720730381119, 0.6241033581931327, 0.6236788197617511, 0.6643161356364049, 0.5577616524049582, 0.6888440258481371, 0.6867893120660341, 0.6685257606057502, 0.599481675493677, 0.7309075091448749, 0.7644365338580481, 0.6176797601816733, 0.6751467827192018, 0.6452178017908761, 0.6684778262246701, 0.7003380077556168, 0.667035916425416, 0.8434451759113093, 0.8419343615815968, 0.8657695361433773, 0.7392487161484605, 0.8773282098364621, …
Run Code Online (Sandbox Code Playgroud)

python math scipy

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

如何在OS X和Linux上使用统一?ocaml版本导致的致命错误

我正在尝试从OS X机器到运行以下操作系统的linux盒使用统一:CentOS版本6.10(最终版)

我必须为Linux盒进行统一2.51的静态编译。这个版本是:

unison version 2.51.2 (ocaml 4.02.3)
Run Code Online (Sandbox Code Playgroud)

在OS X机器上,我使用了“ brew install unison”。这给了我:

unison version 2.51.2 (ocaml 4.08.1)
Run Code Online (Sandbox Code Playgroud)

如果我现在尝试使用统一,则会得到:

Fatal error during unmarshaling (input_value: ill-formed message), possibly because client and server have been compiled with differentversions of the OCaml compiler.
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能统一工作?

centos unison macos-sierra

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

什么是 HIP,为什么不能在 ryzen 3400g 上运行?

我有兴趣在我的 Ryzen 3400g 系统上运行深度学习代码。我在网上看到:

我试图在我的 Ryzen 3400G 上使用 Vega 11,我知道我不能运行 HIP,但我可能可以在这个 APU 上运行 opencl,我的第一步是导入 tensorflow,但是我得到了一个错误,

这是来自https://github.com/ROCmSoftwarePlatform/tensorflow-upstream/issues/669

真的不可能将 ryzen 3400g 与 Radeon vega 11 gpu 与 tensorflow 一起使用吗?

————

是否可以改为与 opencl 一起使用(如https://missinglink.ai/guides/tensorflow/tensorflow-support-opencl/)?

gpu opencl tensorflow amd-rocm

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