1

我正在尝试pyfits通过 OBJNO(对象编号)列匹配两个数据对象。在 IDL 中,这是通过match, A.objno, B.objno, ii, jj过程完成的。这将返回两个索引iijj哪个索引AB这样的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 数组匹配算法?

4

1 回答 1

0

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

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

于 2013-03-16T20:47:53.363 回答