私は一意の要素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
ありますあるセットのデータを使用して他のセットのデータを計算する方が簡単になります。
質問/問題が明確でない場合は、私に知らせてください、私は実際の問題に一致するタイトルについて非常に不確かです! – k0ngcrete