<div dir="ltr"><div>I think this is a great idea!</div><div><br></div><div>I agree that we need a new function. Because the new API is almost strictly superior, we should try to pick a more general name that we can encourage users to switch to from in1d.<br></div><div><br></div><div>Pandas calls this method "isin", which I think is a perfectly good name for the multi-dimensional NumPy version, too:<br></div><div><div><a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.isin.html" target="_blank">http://pandas.pydata.org/<wbr>pandas-docs/stable/generated/<wbr>pandas.Series.isin.html</a><br></div><div><br></div>It's a subjective call, but I would probably keep the new function in arraysetops.py. (This is the sort of question well suited to GitHub rather than the mailing list, though.) <br></div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 19, 2016 at 3:25 PM, Brenton R S Recht <span dir="ltr"><<a href="mailto:brstone@gmail.com" target="_blank">brstone@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span style="font-size:12.8px">I started an enhancement request in the Github bug tracker at </span><a href="https://github.com/numpy/numpy/issues/8331" style="font-size:12.8px" target="_blank">https://github.com/numpy/<wbr>numpy/issues/8331</a><span style="font-size:12.8px"> , but Jaime Frio recommended I bring it to the mailing list.</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">`in1d` takes two arrays, `ar1` and `ar2`, and returns a 1d array with the same number of elements as `ar1`. The logical extension would be a function that does the same thing but returns a (possibly multi-dimensional) array of the same shape as `ar1`. The code already has a comment suggesting this could be done (see </span><a href="https://github.com/numpy/numpy/blob/master/numpy/lib/arraysetops.py#L444" style="font-size:12.8px" target="_blank">https://github.com/numpy/<wbr>numpy/blob/master/numpy/lib/<wbr>arraysetops.py#L444</a><span style="font-size:12.8px"> ). </span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">I agree that changing the behavior of the existing function isn't an option, since it would break backwards compatability. I'm not sure adding an option keep_shape is good, since the name of the function ("1d") wouldn't match what it does (returns an array that might not be 1d). I think a new function is the way to go. This would be it, more or less:</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">def items_in(ar1, ar2, **kwargs):</span><br style="font-size:12.8px"><span style="font-size:12.8px">  return np.in1d(ar1, ar2, **kwargs).reshape(ar1.shape)</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">Questions I have are:</span><br style="font-size:12.8px"><span style="font-size:12.8px">* Function name? I was thinking something like `items_in` or `item_in`: the function returns whether each item in `ar1` is in `ar2`. Is "item" or "element" the right term here?</span><br style="font-size:12.8px"><span style="font-size:12.8px">* Are there any other changes that need to happen in arraysetops.py? Or other files? I ask this because although the file says "Set operations for 1D numeric arrays" right at the top, it's growing increasingly not 1D: `unique` recently changed to operate on multidimensional arrays, and I'm proposing a multidimensional version of `in1d`. `ediff1d` could probably be tweaked into a version that operates along an axis the same way unique does now, fwiw. Mostly I want to know if I should put my code changes in this file or somewhere else.</span><br style="font-size:12.8px"><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Thanks,</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">-brsr</div></div>
<br>______________________________<wbr>_________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org">NumPy-Discussion@scipy.org</a><br>
<a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.scipy.org/<wbr>mailman/listinfo/numpy-<wbr>discussion</a><br>
<br></blockquote></div><br></div></div>