我试图通过OBJNO(对象编号)列匹配两个pyfits
数据对象。在IDL中,这是通过match, A.objno, B.objno, ii, jj
过程完成的。这会返回两个指标ii
和jj
,其中A
和B
的索引为A[ii].objno == B[ii].objno
。
这样做是否有numpy / pythonic方式?我不想对A
或B
的排序或大小做出任何规定,因为它们可能是大型表格。这就是我现在正在做的事情:
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数组匹配算法?
答案 0 :(得分:0)
表示数组N
和M
(N > M
)的大小,您的解决方案是O(N * M)。
假设您的阵列足够大,那么使用O(N * logN)解决方案会更好。您可以通过首先对较大的数组进行排序(调用A
),然后对bisect
中的B
中的每个元素执行二进制搜索(例如,使用sorted_A
)来实现此目的。 。