Add .into_view/_mut() methods to Windows, ExactChunks, and ExactChunksMut
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
Research direction
Locate Windows, ExactChunks, ExactChunksMut, and the DimAdd trait from issue #570. Compare the proposed Windows::into_view implementation with the corresponding types, then add the requested immutable and mutable view methods; done means all three types support the requested conversions while preserving outer and window axes.
Written by the indexing model from the issue text.
Description
This can be convenient for some use cases, such as copying windows (especially with a non-unit step between windows) into a new owned array for modification.
This would rely on the DimAdd trait from #570. For example, the implementation for Windows could be the following:
impl<'a, A, D: Dimension> Windows<'a, A, D> {
/// Returns a view such that the outer axes are the iteration axes and the
/// inner axes are the axes of the windows.
///
/// # Example
///
/// ```
/// use ndarray::{array, aview2, s};
///
/// let arr = array![
/// [0, 1, 2, 3],
/// [4, 5, 6, 7],
/// [8, 9, 10, 11],
/// ];
/// let windows = arr.windows([2, 3]).into_view();
/// assert_eq!(windows.shape(), &[2, 2, 2, 3]);
/// assert_eq!(
/// windows.slice(s![0, 0, .., ..]),
/// aview2(&[[0, 1, 2], [4, 5, 6]]),
/// );
/// assert_eq!(
/// windows.slice(s![0, 1, .., ..]),
/// aview2(&[[1, 2, 3], [5, 6, 7]]),
/// );
/// assert_eq!(
/// windows.slice(s![1, 0, .., ..]),
/// aview2(&[[4, 5, 6], [8, 9, 10]]),
/// );
/// assert_eq!(
/// windows.slice(s![1, 1, .., ..]),
/// aview2(&[[5, 6, 7], [9, 10, 11]]),
/// );
/// ```
pub fn into_view(self) -> ArrayView<'a, A, <D as DimAdd<D>>::Output> {
let base_ndim = self.base.ndim();
let out_ndim = 2 * base_ndim; // check for overflow?
let mut out_dim = <D as DimAdd<D>>::Output::zeros(out_ndim);
out_dim.slice_mut()[..base_ndim].copy_from_slice(&self.base.dim.slice());
out_dim.slice_mut()[base_ndim..].copy_from_slice(&self.window.slice());
let mut out_strides = <D as DimAdd<D>>::Output::zeros(out_ndim);
out_strides.slice_mut()[..base_ndim].copy_from_slice(&self.base.strides.slice());
out_strides.slice_mut()[base_ndim..].copy_from_slice(&self.strides.slice());
unsafe { self.base.with_strides_dim(out_strides, out_dim) }
}
}
- Dominant language
- Rust
- Stars
- 4.3k
- Forks
- 391
- PR merge metrics
- No merged PRs in 30d
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from rust-ndarray/ndarray
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
rust-ndarray/ndarray#1612 · 1 comment · 1 reaction ·
-
Difficulty 4/5 3-5 days Newbie friendliness 48/100
rust-ndarray/ndarray#1617 · 1 comment ·
-
bug good first issue
Difficulty 3/5 1-2 days Newbie friendliness 68/100
rust-ndarray/ndarray#1615 · 1 comment ·
-
Difficulty 4/5 3-5 days Newbie friendliness 48/100
rust-ndarray/ndarray#1610 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 72/100
rust-ndarray/ndarray#1609 ·
All issues in rust-ndarray/ndarray
Similar issues
-
bug CLI exec tool-calls
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
maintainer-needed p2 triaged ui windows
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
Maintainers usually reply within 1 day
-
ai_p2
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
ClickHouse/ClickHouse#123351 ·
Maintainers usually reply within 1 day
-
documentation
Difficulty 1/5 Under an hour Newbie friendliness 92/100
github/copilot-sdk#2804 · 1 comment ·
Maintainers usually reply within 1 day