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

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

新規登録して質問してみよう
ただいま回答率
85.35%
NumPy

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1098閲覧

numpyのwhere()にて、unexpectedと出てしまいうまくいかない

narimi

総合スコア18

NumPy

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/09 03:49

編集2021/12/09 04:01

numpyのwhereが使いたい

関数として、受け取った座標データのリストの中から特定のデータを含んでいる番地を受け取りたいと思いました。
そこでindexを使おうとしたところエラーが出たので調べてみた結果、numpy.arrayではwhere()を使うということだったのでそちらに書き換えました。

しかしいくつか形式を変更してもうまくいかず質問するに至りました。

発生している問題・エラーメッセージ

Traceback (most recent call last): line 82, in expand_circle print(np.where(pt = pair[0])) File "<__array_function__ internals>", line 4, in where TypeError: where() got an unexpected keyword argument 'pt'

該当のソースコード

python

1def expand_circle(data, pt, min): 2 min += 0.05 3 pt = np.array(pt) 4 5 #半径を増やした状態での座標データのペアを確認 6 for pair in itertools.combinations(pt, 2): 7 ex_distance = np.linalg.norm(pair[0]-pair[1]) 8 9 #接触しているペアを抽出 10 if(ex_distance <= min * 2): 11 (x_dis, y_dis) = (pair[0] - pair[1]) / 2 12 print(pair[0]) 13 print(pair[1]) 14 print(pt) 15 print(np.where(pt = pair[0])) 16 index0 = np.where(pt = pair[0])[0][0] 17 index1 = np.where(pt = pair[1])[0][0] 18 print("距離:" + str(ex_distance - min)) 19 print("接触:" + str(pair[0]) + "," + str(pair[1])) 20 print("座標距離:" + str(pair[0] - pair[1])) 21 22 if(x_dis < 0): 23 pt[index0][0] = pt[index0][0] - x_dis 24 pt[index1][0] = pt[index1][0] + x_dis 25 else: 26 pt[index0][0] = pt[index0][0] + x_dis 27 pt[index1][0] = pt[index1][0] - x_dis 28 29 if(y_dis < 0): 30 pt[index0][1] = pt[index0][1] - y_dis 31 pt[index1][1] = pt[index1][1] + y_dis 32 else: 33 pt[index0][1] = pt[index0][1] + y_dis 34 pt[index1][1] = pt[index1][1] - y_dis 35 36 #半径を返却 37 return data, pt, min

試したこと

エラーの下になっている「pt」はclassを見てみたところ'numpy.ndarray'だったので、他のファイルで条件を一致させたうえで簡易的な実装をしてみたところうまくいったのでなぜうまくいかないのかわかりません。

以下、試したコードになります。

python

1a = np.array([[1,2],[3,5],[4,1]]) 2ai = [[1,2],[3,5]] 3ai = np.array(ai) 4print(type(a)) 5print(ai) 6 7ab = np.where(a == ai[1])[0][0] 8print(ab)

補足情報

拙い部分が多々あると思われますが、これらの情報の他に必要な情報などがあれば追加いたします。
よろしくお願いします。

追記:出力結果です

python

1点の最短距離:1.118033988749895 2点と線の最短距離:0.642529405317179 3比較最短距離:0.642529405317179 4[29 29] 5[27 30] 6[[43 25] 7 [27 51] 8 [50 75] 9 [38 32] 10 [40 54] 11 [41 46] 12 [15 37] 13 [36 14] 14 [25 62] 15 [12 12] 16 [26 45] 17 [19 26] 18 [45 43] 19 [46 52] 20 [48 46] 21 [29 22] 22 [27 41] 23 [29 29] 24 [47 71] 25 [27 30]]

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

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

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

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

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

melian

2021/12/09 04:07

print(np.where(pt = pair[0])) は print(np.where(pt == pair[0])) ではないでしょうか。
guest

回答2

0

ベストアンサー

python

1 print(np.where(pt = pair[0]))

python

1 print(np.where(pt == pair[0]))

に修正しましょう。

投稿2021/12/09 04:03

ppaul

総合スコア24670

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

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

narimi

2021/12/09 04:06

できました、、、ありがとうございます!! 使い方をきちんと理解できておりませんでした。 本当にありがとうございました。
guest

0

where関数にはptという名前のキーワード引数はありません、という内容のエラーです。
処理内容は確認していませんが、単にnp.where(pt == pair[0])でよいと思います。

投稿2021/12/09 03:59

編集2021/12/09 04:05
can110

総合スコア38341

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

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

narimi

2021/12/09 04:05

出力結果を追記しましたので見ていただきたいのですが、リストptに格納された座標データ群に対してpair[0]が何番目にあるのか、というのが求めたいことになります。 np.where(pair[0])にするとエラーは出ないのですが、結果がすべて[0,1]になってしまいうまくいきません。。
can110

2021/12/09 04:05

なるほど。回答を修正しました。
narimi

2021/12/09 04:07

その方法でエラーなく進めることができました。。 勉強不足でした。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問