slice(at:)
Returns a sub-view with the same rank as this view by slicing the dimensions at the provided ranges.
Declaration
@export(implementation) consuming func slice(at ranges: [any NDArray.RangeExpression]) -> NDArray.MutableView<Element>Parameters
- ranges:
The range expressions describing where to slice along each dimension.
ranges.countmust be ≤rank. Unspecified trailing dimensions are assumed to be.all.
Discussion
For example if you have a 3D NDArray and want to increment a specific region, you can slice that region and then access a span over it (or use withUnsafeMutablePointer if not contiguous).
/// Updates the desired channel and range of rows
func incrementRegion(
of mutableView: consuming NDArray.MutableView<Float>,
channel: Int,
startRow: Int,
endRow: Int
) {
var region = mutableView.slice(at: [channel, startRow..<endRow, .all])
var mutableSpan = region.contiguousElements! // contiguous region expected in this case
for i in mutableSpan.indices {
mutableSpan[i] += 1
}
}