This seems like something that can be done with indexing, but I
haven't found the solution.
out is a 2D array is initialized to zeros. x is a 1D array whose
values correspond to the columns of out. For each row in out, set
out[row,x[row]] = 1. Here is working code:
def orthogonal_mod (x, nbits):
out = np.zeros ((len(x), 1<
On Thu, May 20, 2021 at 9:47 AM Neal Becker
This seems like something that can be done with indexing, but I haven't found the solution.
out is a 2D array is initialized to zeros. x is a 1D array whose values correspond to the columns of out. For each row in out, set out[row,x[row]] = 1. Here is working code: def orthogonal_mod (x, nbits): out = np.zeros ((len(x), 1<
Any idea to do this without an explicit python loop?
i = np.arange(len(x)) j = x[i] out[i, j] = 1  Robert Kern
Thanks!
On Thu, May 20, 2021 at 9:53 AM Robert Kern
On Thu, May 20, 2021 at 9:47 AM Neal Becker
wrote: This seems like something that can be done with indexing, but I haven't found the solution.
out is a 2D array is initialized to zeros. x is a 1D array whose values correspond to the columns of out. For each row in out, set out[row,x[row]] = 1. Here is working code: def orthogonal_mod (x, nbits): out = np.zeros ((len(x), 1<
Any idea to do this without an explicit python loop?
i = np.arange(len(x)) j = x[i] out[i, j] = 1
 Robert Kern _______________________________________________ NumPyDiscussion mailing list NumPyDiscussion@python.org https://mail.python.org/mailman/listinfo/numpydiscussion
 Those who don't understand recursion are doomed to repeat it
Or as a oneliner:
out[np.arange(len(x)), x] = 1
If NEP 21 is accepted (
https://numpy.org/neps/nep0021advancedindexing.html) this would be even
simpler:
out.vindex[:, x] = 1
Was there ever a decision about that NEP? I didn't follow the discussion
too closely at the time.
On Thu, May 20, 2021 at 10:06 AM Neal Becker
Thanks!
On Thu, May 20, 2021 at 9:53 AM Robert Kern
wrote: On Thu, May 20, 2021 at 9:47 AM Neal Becker
wrote: This seems like something that can be done with indexing, but I haven't found the solution.
out is a 2D array is initialized to zeros. x is a 1D array whose values correspond to the columns of out. For each row in out, set out[row,x[row]] = 1. Here is working code: def orthogonal_mod (x, nbits): out = np.zeros ((len(x), 1<
Any idea to do this without an explicit python loop?
i = np.arange(len(x)) j = x[i] out[i, j] = 1
 Robert Kern _______________________________________________ NumPyDiscussion mailing list NumPyDiscussion@python.org https://mail.python.org/mailman/listinfo/numpydiscussion
 Those who don't understand recursion are doomed to repeat it _______________________________________________ NumPyDiscussion mailing list NumPyDiscussion@python.org https://mail.python.org/mailman/listinfo/numpydiscussion
On Thu, May 20, 2021 at 1:40 PM CJ Carey
Or as a oneliner:
out[np.arange(len(x)), x] = 1
Ah, right. `x[arange(len(x))]` is a noop.
If NEP 21 is accepted ( https://numpy.org/neps/nep0021advancedindexing.html) this would be even simpler:
out.vindex[:, x] = 1
Was there ever a decision about that NEP? I didn't follow the discussion too closely at the time.
IIRC, I think there was broad agreement on the final plan as stated in the NEP. I suspect, though, that the general appetite for adding to the array API surface has declined even from its anemic starting point, now that deep learning frameworks with ndarraymimicking APIs have taken off.  Robert Kern
On Thu, 20210520 at 13:46 0400, Robert Kern wrote:
On Thu, May 20, 2021 at 1:40 PM CJ Carey
wrote:
<snip>
If NEP 21 is accepted ( https://numpy.org/neps/nep0021advancedindexing.html) this would be even simpler:
out.vindex[:, x] = 1
Was there ever a decision about that NEP? I didn't follow the discussion too closely at the time.
IIRC, I think there was broad agreement on the final plan as stated in the NEP. I suspect, though, that the general appetite for adding to the array API surface has declined even from its anemic starting point, now that deep learning frameworks with ndarraymimicking APIs have taken off.
True, I am not sure on which side we would land now. Although, NumPy's advanced indexing is too odd to expect ndarraymimicking APIs to copy it. At least with new attributes you have a chance to define clearly what should happen. I personally still have appetite for it. But expect there will be enough "small" things to fixup (improve the NEP, figure out how subclassing should be done, cleanup the old code) that this is still a decent sized project. The old 8020 problem, I guess... So, it just never quite reached the motivation/priority threshold for me since the original push. Cheers, Sebastian
_______________________________________________ NumPyDiscussion mailing list NumPyDiscussion@python.org https://mail.python.org/mailman/listinfo/numpydiscussion
participants (4)

CJ Carey

Neal Becker

Robert Kern

Sebastian Berg