<div dir="ltr"><div>Perhaps you could move the code from in1d to your new function and redefine in1d in terms of it? That may help encourage migration and also make deprecation easier down the line.<br><br></div>    -Joe<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 19, 2016 at 8:43 PM, Stephan Hoyer <span dir="ltr"><<a href="mailto:shoyer@gmail.com" target="_blank">shoyer@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"><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/panda<wbr>s-docs/stable/generated/pandas<wbr>.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"><div><div class="h5">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></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><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/nu<wbr>mpy/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/ar<wbr>raysetops.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></div></div>______________________________<wbr>_________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@scipy.org" target="_blank">NumPy-Discussion@scipy.org</a><br>
<a href="https://mail.scipy.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.scipy.org/mailman<wbr>/listinfo/numpy-discussion</a><br>
<br></blockquote></div><br></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>