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?
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
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
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
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.
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