2012-02-09 36 views
2

我正在做空間優化。我有大約2萬個細胞,其「所有者」有機會走向最佳狀態。細胞大小和形狀各不相同。我需要做的任務是計算當地社區所有者之間的界線長度。 (這只是一個選項,如何確定單元的新所有者。)R:如何以最有效的方式計算不同「所有者」之間的單元格邊界長度?

我有三個矩陣。 第一個具有代表Line_id,Left_cell_neighbour,right_cell_neighbour,length_of_line的列。線是單元格的邊界線之一。兩個細胞之間可能不僅僅是一條線。

 Line_ID LEFT_ID RIGHT_ID  Lenght 
[1,]  1  5   1 31.648135 
[2,]  2  15   2 38.229177 
[3,]  3  9  65 2.707813 
[4,]  4  5   4 2.139000 
[5,]  5  1  1279 1.660400 
[6,]  6  6   1 25.000000 

二號人物已經表示列:單元ID,Neightbour_cell_1_id,Neighbour_cell_2_id ..等等。小區之間的鄰居數量不同,但所有鄰居小區的數量都不足10個。 -1只是爲了填補空白空間。如果有幫助,我可以把它變成NA。

 Cell_Id N_1_Id N_2_Id N_3_Id N_4_Id N_5_Id N_6_Id N_7_Id N_8_Id 
[1,]  1  31  6  2  -1  -1  -1  -1  -1 
[2,]  2  1  67  7  3  -1  -1  -1  -1 
[3,]  3  2  43  8  4  7  6  -1  -1 
[4,]  4  3  9  75  -1  -1  -1  -1  -1 
[5,]  5  44  11  6  -1  -1  -1  -1  -1 

第三個具有代表Cell_id,Owner和變量的列。

 Cell_Id Owner Variable_1 Variable_2 Variable_3 
[1,] 1  22  1.77579  565  399 
[2,] 2  22 284.08909  427  228 
[3,] 3  22 367.90390  464  269 
[4,] 4  22  0.01670  231   67 
[5,] 5  22  33.89463  241   73 
[6,] 6  22 422.15516  620  481 

我需要計算大約一半的迭代中不同所有者的鄰居之間的線的長度。迭代的次數是probalby會很大,所以計算應該很快。

在此消息中鏈接的圖片中顯示了一個示例。 用問號標記的單元格的所有者將成爲已經具有與單元格的大部分共同邊界線的單元的所有者。不同的業主以不同的顏色顯示。你可以看到這個單元格的所有者將與擁有單元格3和5的單元格相同。

應計算長度的線條用紅色標記。在鄰居(在這種情況下)有4個不同的所有者,一個用於單元格1,一個用於單元格4,一個用於單元格格式2,一個用於單元格3和5.

然後我應該能夠得到矩陣長度在列中:Owner,lenght_of_borderline。然後,我選擇對應max(lenght_of_borderline)的所有者作爲新所有者。

但是如何有效地計算這個值呢?對於這項任務的其他有效結構等建議值得歡迎。

感謝您的幫助!

鏈接,圖像(我希望它的工作原理)http://imageshack.us/photo/my-images/641/situationn.png/

更新:矩陣的例子。

+4

如果你提供的代碼創建示例數據你可能會得到更多的關注。 – 2012-02-09 19:07:54

+0

我現在添加了示例數據。它只是我實際數據的頭()。 – user1199996 2012-02-10 06:58:56

回答

相關問題