Add .into_view/_mut() methods to Windows, ExactChunks, and ExactChunksMut
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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) }
}
}
- Linguagem predominante
- Rust
- Estrelas
- 4.3k
- Forks
- 391
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de rust-ndarray/ndarray
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
rust-ndarray/ndarray#1612 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
rust-ndarray/ndarray#1617 · 1 comentário ·
-
Stack overflow in `triu` Abertabug good first issue
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 68/100
rust-ndarray/ndarray#1615 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
rust-ndarray/ndarray#1610 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 72/100
rust-ndarray/ndarray#1609 ·
Todas as issues de rust-ndarray/ndarray
Issues semelhantes
-
risk:low runtime status:in-progress type:test
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 92/100
zeroclaw-labs/zeroclaw#11023 ·
-
good first issue refactor
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 86/100
kwakseongjae/auto-hwp#319 ·
-
area:cli bug filter-quality good first issue priority:medium
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 72/100
bevyengine/bevy#25861 ·