![](https://secure.gravatar.com/avatar/0b7d465c9e16b93623fd6926775b91eb.jpg?s=120&d=mm&r=g)
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<<nbits), dtype=complex) for e in range (len (x)): out[e,x[e]] = 1 return out Any idea to do this without an explicit python loop? -- Those who don't understand recursion are doomed to repeat it
![](https://secure.gravatar.com/avatar/764323a14e554c97ab74177e0bce51d4.jpg?s=120&d=mm&r=g)
On Thu, May 20, 2021 at 9:47 AM Neal Becker <ndbecker2@gmail.com> 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<<nbits), dtype=complex) for e in range (len (x)): out[e,x[e]] = 1 return out
Any idea to do this without an explicit python loop?
i = np.arange(len(x)) j = x[i] out[i, j] = 1 -- Robert Kern
![](https://secure.gravatar.com/avatar/0b7d465c9e16b93623fd6926775b91eb.jpg?s=120&d=mm&r=g)
Thanks! On Thu, May 20, 2021 at 9:53 AM Robert Kern <robert.kern@gmail.com> wrote:
On Thu, May 20, 2021 at 9:47 AM Neal Becker <ndbecker2@gmail.com> 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<<nbits), dtype=complex) for e in range (len (x)): out[e,x[e]] = 1 return out
Any idea to do this without an explicit python loop?
i = np.arange(len(x)) j = x[i] out[i, j] = 1
-- Robert Kern _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion
-- Those who don't understand recursion are doomed to repeat it
![](https://secure.gravatar.com/avatar/f9edf141570be78631565a8c8883bde5.jpg?s=120&d=mm&r=g)
Or as a one-liner: out[np.arange(len(x)), x] = 1 If NEP 21 is accepted ( https://numpy.org/neps/nep-0021-advanced-indexing.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 <ndbecker2@gmail.com> wrote:
Thanks!
On Thu, May 20, 2021 at 9:53 AM Robert Kern <robert.kern@gmail.com> wrote:
On Thu, May 20, 2021 at 9:47 AM Neal Becker <ndbecker2@gmail.com> 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<<nbits), dtype=complex) for e in range (len (x)): out[e,x[e]] = 1 return out
Any idea to do this without an explicit python loop?
i = np.arange(len(x)) j = x[i] out[i, j] = 1
-- Robert Kern _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion
-- Those who don't understand recursion are doomed to repeat it _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion
![](https://secure.gravatar.com/avatar/764323a14e554c97ab74177e0bce51d4.jpg?s=120&d=mm&r=g)
On Thu, May 20, 2021 at 1:40 PM CJ Carey <perimosocordiae@gmail.com> wrote:
Or as a one-liner:
out[np.arange(len(x)), x] = 1
Ah, right. `x[arange(len(x))]` is a no-op.
If NEP 21 is accepted ( https://numpy.org/neps/nep-0021-advanced-indexing.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 ndarray-mimicking APIs have taken off. -- Robert Kern
![](https://secure.gravatar.com/avatar/b4f6d4f8b501cb05fd054944a166a121.jpg?s=120&d=mm&r=g)
On Thu, 2021-05-20 at 13:46 -0400, Robert Kern wrote:
On Thu, May 20, 2021 at 1:40 PM CJ Carey <perimosocordiae@gmail.com> wrote:
<snip>
If NEP 21 is accepted ( https://numpy.org/neps/nep-0021-advanced-indexing.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 ndarray-mimicking 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 ndarray-mimicking 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 fix-up (improve the NEP, figure out how subclassing should be done, clean-up the old code) that this is still a decent sized project. The old 80-20 problem, I guess... So, it just never quite reached the motivation/priority threshold for me since the original push. Cheers, Sebastian
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion
participants (4)
-
CJ Carey
-
Neal Becker
-
Robert Kern
-
Sebastian Berg