I've been working on creating a few lazy arrays for our applications.

For large data volumes, it is often critical to avoid the use of bounce buffers.

Essentially, I'm looking to see if there exists a function like `np.take` that would take:

1. A slice for the input array.
2. A slice for the output array.
3. Assign the slice of the input array to the output array.

I could "slice" and assign,

Pseudocode:

s = MyFancyArray((3, 1024, 1024, 1024))   # A very big array
a = np.zeros(s.shape, dtype=s.dtype)
a[...] = s   # I want this operation to be crafted carefully

But that seems to:
1. Instantiate the full array `s` with `__array__`.
2. slice into s without passing me a reference to the array `a`.

Is there something like `np.take` or `np.copyto` that is more general?