2017-03-17 8 views
1

私は一意の要素IDとノードIDのリストと、どの要素にどのノードが含まれているかを格納する配列を持っています。他の配列間の接続を格納する配列

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] 

は、今私はかなり頻繁に、これらの2つのエンティティを接続する必要があります:Element_IDsあたりnodes_IDsの数は3-20の間で変動し得るが、1つのアレイ内では一定である要素の位置を取得するために を例えばI Node_IDで座標をルックアップする必要があります。それから私は何かを計算し、それを各ノードのために保存したい。だから、どの要素にどのノードが含まれているか、そしてその逆の要素がノードIDに属しているかを接続する必要があります。

Iは、(120 000のうち例えば100)ノードのサブセットを有するノード

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

の大規模なリストの

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

Iが "要素" アレイからエントリを発見以下のコードを持つ "ノードセット"の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は、そのようなTHIを用いた素子1の部分、要素5、要素8と素子9

ありますあるセットのデータを使用して他のセットのデータを計算する方が簡単になります。

+0

質問/問題が明確でない場合は、私に知らせてください、私は実際の問題に一致するタイトルについて非常に不確かです! – k0ngcrete

答えて

0

マップの面で必要なものを実行するハッシュマップ(または複数のマップ)を使用するのはどうでしょうか。そうすれば、関係を取得する際にO(1)が得られます(もちろん、データ構造の設定と更新はおそらく二次的なものになります)。

+0

私が理解する限り、要素とそのノードの関係、ノードのリスト内のそれらの位置を格納するために二項表記を使用するつもりですか?たとえば、dic = {Element_ID_1:[Node_ID_1、Node_ID_2、Node_ID_3、..]、Element_ID_1:[...]、...} – k0ngcrete

+0

あなたのシナリオに該当する場合は、はい。さもなければ、これはグラフ実装です。 – chaos