簡體   English   中英

從其 3 個投影和 2D 陣列重新生成 3D 陣列

[英]regenerate 3D Array from its 3 projection sum 2D arrays

我試圖找到一種可編程的方法來重新生成任何大小的 3D 數組 - 僅由 1 和 0 組成 - 通過了解三個二維數組,這些數組在每個軸上顯示原始數組的總和,如圖所示:

原始 3d 陣列

投影和概念

總和代碼示例:

int D = 3 ; 
int xsum[D][D] =  {0};
int ysum[D][D] =  {0};
int zsum[D][D] =  {0};

for(int x = 0 ; x<D ;x++){
    for(int y = 0 ; y<D ;y++){
        for(int d = 0 ;d<D;d++){
            zsum[x][y] = zsum[x][y] + array[d][y][x];
        }
    }
}
for(int x = 0 ; x<D ;x++){
    for(int z = 0 ;z<D ;z++){
        for(int d = 0 ;d<D;d++){
            ysum[x][z] = ysum[x][z]+array[z][d][x];
        }
    }
}
for(int z = 0 ;z<D ;z++){
    for(int y = 0 ; y<D ;y++){
        for(int d = 0 ;d<D;d++){
            xsum[z][y] = xsum[z][y]+ array[z][y][d];
        }
    }
}

我嘗試了我能想到的最簡單的算法:

for(int x = 0 ; x<D ; x++) {
   for(int y = 0 ; y<D ; y++) {
        if(zsum[x][y]> 0 ){
            for(int z = 0 ; z<D ;z++){
                if(xsum[z][y] > 0 && ysum[x][z] > 0){
                    rearray[z][y][x]= 1;
                    zsum[x][y]-- ;
                    xsum[z][y]-- ;
                    ysum[x][z]-- ;
                }
            }
        }
    }
}

它產生與原始數組非常相似的東西,粗體數字不同:

1,1,0
0,1,0
0,0,0

1 ,1, 0
1,1,1
0 ,1, 1

1,0,1 0,0,1
0,0,1

但是,當我使 D = 4 或 5 出現更多錯誤時,有人可以解釋或建議解決此問題的正確算法嗎?

雖然可能碰巧有大小> 3 的特定值的解決方案,但沒有保證的解決方案,因為信息在求和過程中丟失 - 就像大小 3 一樣,3-D 數組中有 27 個元素,還有 27投影中的元素,因此可能總是有一個解決方案。 然而,對於較大的尺寸,例如 5,3-D 陣列中有 125 個元素,而投影的 2-D 陣列中只有 75 個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM