我使用
从地震立方体中读取了所有样本int NumI = InputSCube.NumSamplesIJK.I;
int NumJ = InputSCube.NumSamplesIJK.J;
int NumK = InputSCube.NumSamplesIJK.K;
double[, ,] InputSeismicCubeData = new double[NumI, NumJ, NumK];
for (int i = 0; i < NumI; i++)
{
for (int j = 0; j < NumJ; j++)
{
ITrace Trace = InputSCube.GetTrace(i, j);
for (int k = 0; k < NumK; k++)
{
InputSeismicCubeData[i, j, k] = Trace[k];
}
}
}
应用一些算法后,我生成输出地震数据,这也是一个与InputSeismicCubeData相同大小的3D数组
我将数据转换为多维数据集
using (ITransaction trans1 = DataManager.NewTransaction())
{
SeismicCollection Sc = InputSCube.SeismicCollection;
trans1.Lock(Sc);
if (Sc.CanCreateSeismicCube(InputSCube))
{
SeismicCube NewCube = Sc.CreateSeismicCube(InputSCube, InputSCube.Template);
if (!NewCube.IsWritable)
{
PetrelLogger.ErrorBox("Unable to Write to the Cloned Cube");
return;
}
for (int i = 0; i < NumI; i++)
{
for (int j = 0; j < NumJ; j++)
{
ITrace trace = NewCube.GetTrace(i, j);
for (int k = 0; k < trace.Length; k++)
{
trace[k] = (float)OutPutSeismicCubeData[i, j, k];
}
}
}
trans1.Commit();
arguments.OutputSCube = NewCube;
}
}
代码正在编译和运行,但它没有意义,好像所有样本都是混乱的。 任何帮助Appriciated
答案 0 :(得分:1)
我认为您所拥有的代码没有任何问题。 Ocean API的Ocean API中有一些工具可以帮助并提高性能。
首先,看一下GetSubCube方法(Index3,Index3)。它创建了SeismicCube的内存部分。它有一个方法ToArray,它将提供您正在进行的立方体样本的三维数组。另一种方法CopyFrom将样本从三维数组复制到ISubcube。如果原始SeismicCube(在您的情况下为输出)被锁定,则ISubCube数据值将被放回到SeismicCube中。
因此,通过为输出生成数据来进行处理将是相同的。创建输出立方体后,您将创建一个从(0,0,0)到(numI-1,numJ-1,numK-1)的ISubCube。使用CopyFrom方法将输出数组复制到ISubCube,并且由于输出SeismicCube在创建时已锁定,因此应将ISubCube中的数据放入其中。