我有一個大型數據集,它表示一個3D圖像(大約100,000,000像素)。我想沿圖像的'z'軸反轉像素。我的數據存儲在一個字節數組中,其中的數據是有序的x,y,z(即[] = {(x = 0,y,z = 0),(x = 1,y = 0,z = 0) (x = 2,y = 0,z = 0)...)存儲在一維數組中的3D數據軸的快速反轉
我可以很容易地使用下面的代碼對它們進行排序,但是我希望儘可能減少計算時間(目前報告大約7秒)。我正在考慮使用數組'sort'函數,但不知道如何處理索引。
這裏是我當前的代碼:
private int GetIndex(Image _image, int _x, int _y, int _z)
{
return (_z * _image.Size.X * _image.Size.Y) + (_y * _image.Size.X) + _x;;
}
private void InvertZ(Image _image)
{
for (int z = 0; z < _image.Size.Z/2; z++)
{
for (int y = 0; y < _image.Size.Y; y++)
{
for (int x = 0; x < _image.Size.X; x++)
{
int srcIndex = GetIndex(_image, x, y, z);
int destIndex = GetIndex(_image, x, y, _image.Size.Z - z - 1);
byte src = _image.Buffer[srcIndex];
byte dest = _image.Buffer[destIndex];
_image.Buffer[srcIndex] = dest;
_image.Buffer[destIndex] = src;
}
}
}
}
只是一個簡單的問題。爲什麼要進行更改或複製到新陣列呢?如果你以一種修改的方式讀取數組呢?你經常修改嗎? –