小编inc*_*ent的帖子

获取与同一个词典中的其他键重叠的词典中的所有键

我有一个列表理解,看起来像这样:

cart = [ ((p,pp),(q,qq)) for ((p,pp),(q,qq))\
         in itertools.product(C.items(), repeat=2)\
         if p[1:] == q[:-1] ]
Run Code Online (Sandbox Code Playgroud)

C是一个带有键的字典,它是任意整数的元组.所有元组都有相同的长度.最糟糕的情况是所有组合都应包含在新列表中.这可能经常发生.

举个例子,我有一个这样的字典:

C = { (0,1):'b',
      (2,0):'c',
      (0,0):'d' }
Run Code Online (Sandbox Code Playgroud)

我希望结果如下:

cart = [ (((2, 0), 'c'), ((0, 1), 'b'))
         (((2, 0), 'c'), ((0, 0), 'd'))
         (((0, 0), 'd'), ((0, 1), 'b'))
         (((0, 0), 'd'), ((0, 0), 'd')) ]
Run Code Online (Sandbox Code Playgroud)

因此,通过重叠,我指的是,例如,元组(1,2,3,4)(2,3,4,5)具有重叠部分(2,3,4).重叠部分必须位于元组的"边缘"上.我只想要长度比元组长度短的重叠.因此(1,2,3,4)不重叠(3,4,5,6).还要注意,当删除元组的第一个或最后一个元素时,我们可能会得到非独特的元组,所有元组都必须与所有其他元素进行比较.在我的第一个例子中没有强调最后一点.

我的代码执行时间的更好部分花在了这个列表理解上.我总是需要所有元素,cart因此在使用发电机时似乎没有加速.

我的问题是:有更快的方法吗?

我的想法是我可以尝试创建两个这样的新词典:

aa = defaultdict(list)
bb = defaultdict(list)
[aa[p[1:]].append(p) for p in C.keys()] …
Run Code Online (Sandbox Code Playgroud)

python algorithm performance dictionary python-itertools

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

Pyodbc在我的机器上非常慢,但在其他机器上却没有

我正在使用python 2.7和pyodbc 3.0.6访问与我的计算机在同一网络上运行的db2(9.7)服务器。

以下是与我尝试执行的操作类似的非常精简的示例。

import pyodbc as db

def dbcur(connectname):
    con = db.connect(connectname)
    cur = con.cursor()
    return cur,con


def main():

    print 'a'
    cur,con = dbcur('DSN=MYODBCCON')
    print 'b'


    # X.name is a short varchar
    qry = """
        select
        X.name as N
        from schema.table as X
        """

    print 'c'

    cur.execute(qry)

    print 'd'

    c = 0
    for row in cur:
        c+=1
        if not c%100:
            print c, row

    return

if __name__ == '__main__': main()
Run Code Online (Sandbox Code Playgroud)

此代码在Windows 8计算机上运行非常慢(10秒钟内运行100行)。但是,在装有Windows 7的同事计算机上,这闪电般快。他的计算机类似地被指定为我的计算机,并且他具有相同版本的pyodbc和python,所以我不认为这是一个问题。

当我同时使用IBM DB2 ODBC DRIVER和IBM DATA SERVER DRIVER …

python windows db2 odbc pyodbc

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

查找包含任意坐标列表的voronoi区域

我正在使用一种算法,对于每次迭代,需要找到一组生态协调所属的Voronoi图的哪个区域.也就是说,每个坐标位于哪个区域内.(我们可以假设所有坐标都属于一个区域,如果这有任何区别的话.)

我还没有任何适用于Python的代码,但伪代码看起来像这样:

## we are in two dimensions and we have 0<x<1, 0<y<1.

for i in xrange(1000):
  XY = get_random_points_in_domain()
  XY_candidates = get_random_points_in_domain()
  vor = Voronoi(XY) # for instance scipy.spatial.Voronoi
  regions = get_regions_of_candidates(vor,XY_candidates) # this is the function i need

  ## use regions for something
Run Code Online (Sandbox Code Playgroud)

我知道scipy.Delaunay有一个名为find_simplex的函数,它会在Delaunay三角剖分中完成我想要的简单操作,但是我需要Voronoi图,并且我希望避免构建它们.

问题:

1.是否有某种类型的库可以让我轻松完成这项工作?

2.如果没有,是否有一个好的算法可以让我有效地做到这一点?

更新

Jamie的解决方案正是我想要的.我有点尴尬,虽然我自己也没想过......

python voronoi scipy tesselation

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