首页 > 解决方案 > 如何在 C# 中获取多维数组切片,numpy 样式?

问题描述

我有

int[,,,] arr = new int[5, 6, 7, 8]; // c#
arr = np.zeros((5, 6, 7, 8)) # Python

一个 4d 数组,带有5 * 6 * 7 * 8单元格。

我想像在 numpy 中一样在 c# 中对其进行切片

var mySlice = arr[2:4, 0, :2, :]; // Won't work in C#, but looking for a way to do this. return type should be int[,,] A 3d array with 2 * 1 * 2 * 8 cells.
my_slice = arr[2:4, 0, :2, :];  # easy with numpy

如果这可以动态完成,那也很好。

如何在 C# 中对多维数组进行切片?

标签: pythonc#arraysnumpyslice

解决方案


据我所知,在 c# 中没有办法做到这一点。除了编写自己的多维数组类。

C# 8 引入了范围和数组切片。但这用于Span<T>返回切片而不需要复制任何值。多维数组存储在连续内存中,因此潜在的多维切片运算符需要每个维度具有一个偏移量和长度。


推荐阅读