逐列匹配python pyfits

时间:2013-02-21 04:51:09

标签: python numpy fits

我试图通过OBJNO(对象编号)列匹配两个pyfits数据对象。在IDL中,这是通过match, A.objno, B.objno, ii, jj过程完成的。这会返回两个指标iijj,其中AB的索引为A[ii].objno == B[ii].objno

这样做是否有numpy / pythonic方式?我不想对AB的排序或大小做出任何规定,因为它们可能是大型表格。这就是我现在正在做的事情:

ii = np.in1d(A.OBJNO, B.OBJNO).nonzero()[0]
jj = [np.where(B.OBJNO == objno)[0][0] for objno in A[ii].field('OBJNO')]

是否有更好的numpy数组匹配算法?

1 个答案:

答案 0 :(得分:0)

表示数组NMN > M)的大小,您的解决方案是O(N * M)。

假设您的阵列足够大,那么使用O(N * logN)解决方案会更好。您可以通过首先对较大的数组进行排序(调用A),然后对bisect中的B中的每个元素执行二进制搜索(例如,使用sorted_A)来实现此目的。 。