小编Mar*_*ell的帖子

Python多处理具有多个输入的函数

在Python中,multiprocessing模块可用于并行运行一系列值的函数.例如,这将生成f的前100000个评估的列表.

def f(i):
    return i * i

def main():
    import multiprocessing
    pool = multiprocessing.Pool(2)
    ans = pool.map(f, range(100000))

    return ans
Run Code Online (Sandbox Code Playgroud)

当f接受多个输入但只有一个变量变化时,可以做类似的事情吗?例如,您将如何并行化:

def f(i, n):
    return i * i + 2*n

def main():
    ans = []
    for i in range(100000):
        ans.append(f(i, 20))

    return ans
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

17
推荐指数
3
解决办法
2万
查看次数

RAMdisk比磁盘慢吗?

我创建的python程序是IO有界的.大多数时间(超过90%)花费在单个循环中,重复约10,000次.在这个循环中,生成~100KB的数据并写入临时文件; 然后由另一个程序读回,并收集有关所收集数据的统计数据.这是将数据传递到第二个程序的唯一方法.

由于这是主要的瓶颈,我认为将临时文件的位置从我的主硬盘移动到(~40MB)RAMdisk(超过2GB的可用RAM内)将大大提高该文件的IO速度,从而减少运行时.但是,我获得了以下结果(每次平均超过20次运行):

  • 测试数据1:没有RAMdisk - 72.7s,RAMdisk - 78.6s
  • 测试数据2:没有RAMdisk - 223.0s,RAMdisk - 235.1s

看起来RAMdisk比我的HDD慢.

可能是什么导致了这个?

有没有其他替代方法使用RAMdisk以获得更快的文件IO?

performance file ramdisk

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

如何有效地确定一组点是否包含两个接近的点

我需要确定一组点(每个由浮点元组给出,每个都在[0,1]中)包含两个在彼此的某个阈值(例如0.01)内的点.我还要提一下,在我感兴趣的问题版本中,这些"点"由长度为〜30的元组给出,即它们是[0,1] ^ 30中的点.

我可以使用以下内容测试是否有任何两个在此阈值内:

def is_near(p1, p2):
    return sqrt(sum((x1 - x2)**2 for x1, x2 in zip(p1, p2))) < 0.01  # Threshold.
Run Code Online (Sandbox Code Playgroud)

使用这个我可以使用以下内容检查每一对:

def contains_near(points):
     from itertools import combinations
     return any(is_near(p1, p2) for p1, p2 in combinations(points, r=2))
Run Code Online (Sandbox Code Playgroud)

然而,这在列表的长度上是二次的,这对于我所拥有的长点列表来说太慢了.

有没有解决这个问题的方法?

我尝试过将这些点捕捉到网格中,这样我就可以使用字典/哈希映射来存储它们:

def contains_near_hash(points):
     seen = dict()
     for point in points:
         # The rescaling constant should be 1 / threshold.
         grid_point = tuple([round(x * 100, 0) for x in point])  
         if grid_point in seen:
             for other in seen[grid_point]:
                 if is_near(point, other):
                      return …
Run Code Online (Sandbox Code Playgroud)

python algorithm geometry computational-geometry

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