Wes McKinney <wesmckinn <at> gmail.com> writes:
> Before I reinvent the wheel, was curious if there was an equivalent function
elsewhere already. If not then some Cython/Pyrex is in order.Thanks,Wes
For a similar purpose (with the handling of non-common items), I used:
def find_indices(big, small):
"""Find indices in big array of elements of small arrays. Set index=-1
elements of small that cannot be found in big."""
idx = np.array([ np.argmax(big==s) for s in small ])
# Mark unfound value indices (beware: -1 is a valid index!)
idx[big[idx]!=small] = -1
return idx
In [63]: all_data = np.array([[1,2,3,4,5], [12,19,27,38,51]]).T
In [64]: sub_data = np.array([[3,5,1], [nan,nan,nan]]).T
In [67]: match_ind = find_indices(all_data[:,0],sub_data[:,0])
In [68]: sub_data[:,1] = all_data[match_ind,1]
In [69]: sub_data
Out[69]:
array([[ 3., 27.],
[ 5., 51.],
[ 1., 12.]])
Cheers.