2017-03-17 48 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