我想从 3 维数组中获取一个 2 维数组。假设我有一个维度为 [10,10,10]
的双 3d 数组 A3
我需要得到一个二维数组 A2 = A3[:,5,:],即第二维的索引等于例如5.
如果我想获得二维数组 A2(即二维数组的第一个实例)的分区(例如 A1=A2[2,:] 的类型),我可以这样做(第一维的索引例如设置为 2):
double[] A1 = Enumerable.Range(0,A2.Length).Select(x=>A2[2,x]).ToArray();
如何从 3 到 2(或通常从 N 到 N-1)维度做到这一点?
编辑。输入示例:
double[,,] A3 = new double[2,3,4]{
{
{4,3,2,1},
{5,4,3,2},
{6,5,4,3}
},
{
{1,2,3,4},
{2,3,4,5},
{3,4,5,6}
}
};
结果数组 A2=A3[:,1,:] 必须包含以下内容:{ {5,4,3,2},{2,3,4,5} }
最佳答案
LINQ 通常不能很好地处理多维数组。这些操作本质上是一维的。它在嵌套的一维数组中表现得更好,所以如果您想返回深度为 2 的锯齿状数组,即 double[][]
而不是 double[,]
LINQ 是更合适的工具。
public static T[][] GetPlane<T>(T[, ,] source, int secondDimensionValue)
{
return Enumerable.Range(0, source.GetLength(0))
.Select(i => Enumerable.Range(0, source.GetLength(2))
.Select(j => source[i, secondDimensionValue, j])
.ToArray())
.ToArray();
}
关于c# - 使用 LINQ 获取多维数组的分区(N 维数组的 (N-1) 维实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15556358/