Add .into_view/_mut() methods to Windows, ExactChunks, and ExactChunksMut
還沒有人認領這個 Issue。
評估
研究方向
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.
由索引模型根據 Issue 內容生成。
描述
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) }
}
}
- 主要語言
- Rust
- 星號
- 4.3k
- 分支
- 391
- PR 合併指標
- 30 天內沒有已合併 PR
貢獻指南
這個儲存庫沒有索引到貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
rust-ndarray/ndarray 的其他 Issue
-
難度 2/5 1-3 小時 新手友好度 72/100
rust-ndarray/ndarray#1612 · 1 則留言 ·
-
難度 4/5 3-5 天 新手友好度 48/100
rust-ndarray/ndarray#1617 · 1 則留言 ·
-
bug good first issue
難度 3/5 1-2 天 新手友好度 68/100
rust-ndarray/ndarray#1615 · 1 則留言 ·
-
難度 4/5 3-5 天 新手友好度 48/100
rust-ndarray/ndarray#1610 ·
-
難度 3/5 1-2 天 新手友好度 72/100
rust-ndarray/ndarray#1609 ·
查看 rust-ndarray/ndarray 的全部 Issue
相似的 Issue
-
bug github_actions
難度 2/5 1-3 小時 新手友好度 75/100
registrystack/registry-stack#1393 ·
-
難度 2/5 1-3 小時 新手友好度 75/100
longbridge/gpui-kit#3223 ·
-
bug engine
難度 2/5 1-3 小時 新手友好度 65/100
rocky-data/rocky#2181 ·
-
難度 2/5 1-3 小時 新手友好度 70/100
oasisprotocol/oasis-sdk#2523 ·
-
bot:ai-assisted component:indexer QA-roadmap status:untriaged
難度 2/5 1-3 小時 新手友好度 75/100
midnightntwrk/midnight-indexer#1557 ·