有没有更快的方法来建立列表列表?

时间:2014-04-16 21:43:57

标签: python

我的代码是区域内匹配的功能。它做的第一件事是匹配从一个区域到整个区域特征数据库的特征。

所以我有一个从查询特征索引(qfx)到数据库特征索引(ax)的映射。 数据库特征索引与区域id(rid),区域特征索引(fx),特征分数(fs)和特征等级(fk)相关联。 还有一个标记将每个映射标记为有效或无效。

问题是我想将query_feature_index-to-database_feature_index(qfx2_ax)的映射转换为region_index-to-feature_match(rid2_fm,rid2_fs和rid2_fk)的映射

我有以下代码执行此操作(为清晰起见,稍微清理一下)。左边的大小是每个步骤占用的粗略百分比。大部分时间似乎都是通过附加到默认词典中的列表来消耗掉的。

在我看来似乎没有更好的方法来做到这一点,但也许有人在那里知道我不知道的事情。也许有一个我不知道的笨拙的例行公事?

  0.0      for qrid in qrid2_nns.iterkeys():
  0.0          (qfx2_ax, _) = qrid2_nns[qrid]
  0.0          (qfx2_fs, qfx2_valid) = qrid2_nnfilt[qrid]
  0.0          nQKpts = len(qfx2_ax)
               # Build feature matches
  0.0          qfx2_nnax = qfx2_ax[:, 0:K]
  0.4          qfx2_rid  = ax2_rid[qfx2_nnax]
  0.5          qfx2_fx   = ax2_fx[qfx2_nnax]
  0.2          qfx2_qfx = np.tile(np.arange(nQKpts), (K, 1)).T
  0.1          qfx2_k   = np.tile(np.arange(K), (nQKpts, 1))
               # Pack valid feature matches into an interator
  0.4          valid_lists = [qfx2_[qfx2_valid] for qfx2_ in (qfx2_qfx, qfx2_rid, qfx2_fx, qfx2_fs, qfx2_k,)]
  0.0          match_iter = izip(*valid_lists)
  0.0          rid2_fm = defaultdict(list)
  0.0          rid2_fs = defaultdict(list)
  0.0          rid2_fk = defaultdict(list)
               # This creates the mapping I want. Can it go faster?
 19.3          for qfx, rid, fx, fs, fk in match_iter:
 17.2              rid2_fm[rid].append((qfx, fx)) 
 17.0              rid2_fs[rid].append(fs)
 16.2              rid2_fk[rid].append(fk)

0 个答案:

没有答案