2017-03-17 61 views
1

我有一個唯一的元素ID和節點ID的列表以及存儲哪個元素包含哪些節點的數組。每Element_IDs nodes_IDs的數量3-20有所不同,但一個陣列內是恆定的:數組來存儲其他數組之間的連接

Elements = np.array(([ 1, 1, 2, 3, 4, ...,, Node_ID_k], 
        [ 2, 6, 1, 4, 5, ...,, Node_ID_k], 
        [...] 
        [Element_ID, Node_ID_1, Nodes_ID_2, ..., Node_ID_k] 

現在我需要這兩個實體經常連接: 例如獲得元素的位置我必須通過Node_ID查找座標。然後我計算一些東西並且想要爲每個節點存儲它。所以我需要連接哪個元素包含哪些節點,然後相反,哪些元素屬於節點ID。

節點

Nodes = [Node_ID 1, Node_ID 2,Node_ID 3, ... , Node_ID 120000] 

我有(120 000例如100出來)的節點的子集的大列表的:

Nodeset = [ Node_ID 1, ..., Node_ID 100] 

我發現的條目從「元素」陣列,其中包含以下代碼的「節點集」ID:

import numpy as np 

def getbyfnodes(Nodeset, Elements): 

    #nodes per element 
    npe = 4 

    #mask 
    mask_element = np.zeros((Elements.shape[0]), dtype = bool) 
    mask_nodes = np.zeros_like(Elements[:,1:], dtype = bool) 

    for i,column in enumerate(Elements[:,1:].T): #check colum wise 
     mask_nodes[:,i] = np.in1d(column, Nodeset) 

    mask_element = mask_nodes.sum(axis = 1) == npe #only elements with 'npe' nodes 

    #reduced size row wise 
    mask_nodes = mask_nodes[mask_element,:] # reduce Nodes mask for Relevant elements 

    # Node_ID, Element_ID 1, 2, 3, 4 
    Set_elements = np.zeros((len(Nodeset),npe + 1)) 
    Set_elements[:,0] = Nodeset 

    for i,row in enumerate(Elements[mask_element,1:]): 
     Set_elements[i,:] = row[mask_nodes[i,:]] 

    return Set_elements 

如何獲得其他方式? 我想有一個陣列的,其列出了「節點組」第一的節點ID,然後該元素ID屬於該節點:

Nodes = np.array(([Node_ID 1 , Element_ID_1, Element_ID_2, ..., Element_ID_k], 
        [...], 
        [Node_ID 100 , Element_ID_1, Element_ID_2, ..., Element_ID_k])) 

理想我希望有存儲的

連接或指針數組

元件1包含節點1,節點2,節點3和節點4
節點1是元件1的一部分,元件5,元件8和元件9

使用這樣THI ng會使得使用一組數據更容易計算其他組的數據!

+0

如果問題不明確,請讓我知道,我很不確定標題匹配的實際問題! – k0ngcrete

回答

0

如何使用散列圖(或多個散列圖)來完成映射方面的工作。這樣你就可以獲得O(1)檢索關係(當然,建立和更新數據結構可能是二次的或類似的)。

+0

據我所知,你打算使用dictonary來存儲元素及其節點和它們在節點列表中的位置之間的關係?例如:dic = {Element_ID_1:[Node_ID_1,Node_ID_2,Node_ID_3,..],Element_ID_1:[...],...} – k0ngcrete

+0

如果它適用於您的場景,是的。否則,這是一個圖形實現。 – chaos