【发布时间】:2013-03-21 19:26:11
【问题描述】:
我想从 3d 数组中获取 2d 数组。假设我有一个尺寸为 [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?只需编写循环来完成它就会更容易加载(可能运行得更快)。只需编写一个扩展方法即可,Bob 就是你的叔叔!
-
尺寸不相等,可能是[2,17,5];人们总是可以编写循环或函数而不是 LINQ。此外,假设知道如何完成这项任务,我可以轻松地将这种方法扩展到其他多维对象