0

我使用从地震立方体中读取所有样本

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;
                        }
                    }

代码正在编译和运行,但它没有意义,似乎所有的样本都混乱了。任何帮助

4

1 回答 1

1

我没有看到您现有的代码有任何问题。SeismicCube 的 Ocean API 中有一些工具可以帮助并提高其性能。

首先,看一下 GetSubCube(Index3, Index3) 方法。它会创建 SeismicCube 的内存部分。它有一个方法,ToArray,它将像您一样提供立方体样本的 3 维数组。另一种方法 CopyFrom 会将样本从 3 维数组复制到 ISubcube。如果原始 SeismicCube(在您的情况下为输出)被锁定,则 ISubCube 数据值将被放回 SeismicCube。

因此,您通过为输出生成数据进行的处理将是相同的。创建输出多维数据集后,您将创建一个从 (0,0,0) 到 (numI-1, numJ-1, numK-1) 的 ISubCube。使用 CopyFrom 方法将您的输出数组复制到 ISubCube,由于输出 SeismicCube 在创建时已锁定,因此应将 ISubCube 中的数据放入其中。

于 2014-11-03T12:00:27.747 回答