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]]
回答2件
あなたの回答
tips
プレビュー