質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

383閲覧

配列Aの特定の値Xがあるとき、別の配列Bの1列目にXが存在する行を探し出して当該行のその他数値を読み取る方法

daily_999

総合スコア3

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

2クリップ

投稿2023/03/10 16:09

実現したいこと

配列Aの特定の値(節点番号)を別の配列B(節点番号と座標の対応表)から探し出し、配列Bの該当行の値(座標)を読み取りたいです。

前提

Python3, Numpyを使って汎用数値解析プログラムのインプット作成補助ツールを作っています。

配列Aの各行はグループを表し、1列目にグループ番号、2~5列目にそのグループに属する4つの節点番号が並んでいます。
配列Bの各行は節点を表し、1列目に節点番号、2~4列目に節点のx,y,z座標が並んでいます。
配列Aの2~5列目の節点番号は、配列Bの1列目のいずれかに必ず該当します。

いま、配列Aの各グループに対し、グループを構成する4つの節点の座標を配列Bから読取り、各グループの四角形の面積を求めようとしています。

ご教示いただきたいこと

配列Aのグループiの4点i1(i1x,i1y,i1z)~i4(i4x,i4y,i4z)の座標を配列Bから読取る方法をご教示いただきたく存じます。
座標を読取った後に面積計算するために下記の配列Cのような形にしたいと考えており、(i1x,i1y,i1z)~(i4x,i4y,i4z)の具体的な表現方法を教えていただきたいです。

該当のソースコード

配列A、配列B、配列Nodes(座標を整理したイメージの)の例を以下に記載します。
・配列A…(N,5)
・配列B…(M,4)
・配列C…(N,4,3)

Python3

1 2A = np.array([[ 1, 11, 12, 13, 14], #グループ1の番号1と4節点(11,12,13,14) 3         (中略) 4 [ i, i1, i2, i3, i4], #グループiの番号iと4節点(i1,i2,i3,i4) 5           (中略) 6 [ N, N1, N2, N3, N4]]) #グループNの番号Nと4節点(N1,N2,N3,N4) 7 8 9B = np.array([[ 1, 1x, 1y, 1z], #節点1の番号1とxyz座標(1x,1y,1z) 10         (中略) 11 [ i, ix, iy, iz], #節点iの番号iとxyz座標(ix,iy,iz) 12           (中略) 13 [ M, Mx, My, Mz]]) #節点Mの番号Mとxyz座標(Nx,Ny,Nz) 14 15 16 17C = np.array([[[11x, 11y, 11z], #グループ1の4節点(11,12,13,14)の座標 18 [12x, 12y, 12z], 19 [13x, 13y, 13z], 20 [14x, 14y, 14z]], 21 22           (中略) 23 24 [[ i1x, i1y, i1z], #グループiの4節点(i1,i2,i3,i4)の座標 25 [ i2x, i2y, i2z], 26 [ i3x, i3y, i3z], 27 [ i4x, i4y, i4z]] 28 29           (中略) 30 31 [[ N1x, N1y, N1z], #グループNの4節点(N1,N2,N3,N4)の座標 32 [ N2x, N2y, N1z], 33 [ N3x, N3y, N1z], 34 [ N4x, N4y, N1z]]]) 35

試したこと

for文を使って配列Aの1行目の4節点番号を読込むところまではできますが、その節点番号の座標を配列Bから取り出す方法がわかりません。

補足情報(FW/ツールのバージョンなど)

Python3, Numpy

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Aの1列目以降の値とBの0列目の値と一致するものをsearchsortedで探せばよいかと思います。
以下は2節点かつ(x,y)座標のみに簡略化したデータでのコード例です。

Python

1import numpy as np 2 3a = np.array([[0,11,12],[0,12,13],[0,13,14]]) 4b = np.array([[11,1,10],[12,2,20],[13,3,30],[14,4,40]]) 5 6cond = np.searchsorted(b[:,0],a[:,1:]) 7c = b[cond][:,:,1:] 8print(c) 9""" 10[[[ 1 10] 11 [ 2 20]] 12 13 [[ 2 20] 14 [ 3 30]] 15 16 [[ 3 30] 17 [ 4 40]]] 18"""

投稿2023/03/11 02:08

can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daily_999

2023/03/11 14:24

質問がわかりにくい中ご回答いただきありがとうございました。 searchsortedというのを知りませんでしたので、回答のおかげで効率化できそうです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問