🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

2回答

765閲覧

listの特定要素の最小値を検索したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2020/12/29 03:05

編集2020/12/29 03:09

前提・実現したいこと

pythonで様々な点から外接円を描写しました.
その外接円の中で最も半径が小さい円の中心点・半径を求めたいです.

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

print(hyp_list) >>[(array([1741.17881513, 1104.41239808]), 2042.514427317047), (array([18.26888889, 21.44044444]), 21.956230785838162), (array([15.04347826, 19.41304348]), 20.98028825526718), (array([181.16369427, 123.83146497]), 200.87305917047993), (array([1741.5816524 , -280.13928917]), 1741.2641721728157), (array([1741.34381637, 537.30314491]), 1800.3888859851531), (array([ 1751.42386976, -34107.84036074]), 34151.6064504647), (array([20.5 , 21.05]), 21.197936220302203), (array([187.21676301, -8.12543353]), 164.41766304774637), (array([183.63348416, 69.99004525]), 175.21907050389817), (array([ 1638.18147257, -9374.05254089]), 9550.425796339285), (array([ 1697.43989226, -3345.37978452]), 3782.178710166597), (array([ 2052.52236801, 32779.04032173]), 32808.244704911114), (array([20.5, 8.5]), 32.901367752724774), (array([ 136.12365591, -662.1172043 ]), 710.092105941269), (array([ 158.71336761, -267.92673522]), 341.52322502693187), (array([ 2.05000000e+01, -1.51647064e+05]), 151687.0644000551), (array([ 2009.9546199 , 23322.91913471]), 23366.95409612065), (array([ 2017.2034683 , 24933.19903019]), 24973.910593115572), (array([ 20.5, -2142.1]), 2182.120679522781)]

このように現在リストに中心点座標(2次元)と半径を格納しているのですが,半径だけを検索して最小値を求めたいとかんがえています.

該当のソースコード

python

1#外接円の中心・半径を求める関数 2def circumcenter(pts): 3 return (center, radius) 4 5# データ点の生成 6l = [[23,0],[1,35],[3460,1],[30,40],[11,40],[350,15]] 7hyp_list = [] 8 9#すべてのデータ点の組み合わせについて外接円を導出 10for v in itertools.combinations(l, len(l[0])+1): 11 center, radius = circumcenter(v) 12 13 dist_x = np.linalg.norm(l - center, axis=1) 14 15 check = any([i <= radius for i in dist_x]) 16 #すべてのデータが包含される外接円のみをリストに追加 17 if check is True: 18 hyp_list.append(circumcenter(v))

試したこと

print(min(hyp_list[1])) >>ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

多次元と数値のリストなので網羅的にすべての要素を探索することもできません.
よろしくお願いいたします.

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

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

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

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

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

meg_

2020/12/29 03:46

コードを試せないので、circumcenter(pts)の中身も掲載できませんか?
shiracamus

2020/12/29 04:13

タグにnumpyを追加しましょう。
guest

回答2

0

python

1import numpy as np 2 3sample = [[np.array([1741.17881513, 1104.41239808]), 2042.514427317047],[np.array([18.26888889, 21.44044444]), 21.956230785838162], [np.array([15.04347826, 19.41304348]),20.98028825526718]] 4 5print(min(sample, key=lambda x: x[1])) 6#[array([15.04347826, 19.41304348]), 20.98028825526718]

投稿2020/12/29 04:38

meg_

総合スコア10736

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

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

0

すでに退会されたようですが、良ければ参考にしてください。

minのキーワード引数として、key=afunc (afuncは関数)を指定すると、配列の各要素xに対して、afunc(x)を比較して最小の要素を返します。
この場合は、各要素xがndarrayと浮動小数のタプルですので、xの後ろの要素であるx[1]を返す関数を使えば良いのです。

def second(x): return x[1]

などと定義しても良いのですが、こういう簡単名関数の場合にはラムダ式を使う場合が多いです。

python

1>>> pprint.pprint(hyp_list) 2[(array([1741.17881513, 1104.41239808]), 2042.514427317047), 3 (array([18.26888889, 21.44044444]), 21.956230785838162), 4 (array([15.04347826, 19.41304348]), 20.98028825526718), 5 (array([181.16369427, 123.83146497]), 200.87305917047993), 6 (array([1741.5816524 , -280.13928917]), 1741.2641721728157), 7 (array([1741.34381637, 537.30314491]), 1800.3888859851531), 8 (array([ 1751.42386976, -34107.84036074]), 34151.6064504647), 9 (array([20.5 , 21.05]), 21.197936220302203), 10 (array([187.21676301, -8.12543353]), 164.41766304774637), 11 (array([183.63348416, 69.99004525]), 175.21907050389817), 12 (array([ 1638.18147257, -9374.05254089]), 9550.425796339285), 13 (array([ 1697.43989226, -3345.37978452]), 3782.178710166597), 14 (array([ 2052.52236801, 32779.04032173]), 32808.244704911114), 15 (array([20.5, 8.5]), 32.901367752724774), 16 (array([ 136.12365591, -662.1172043 ]), 710.092105941269), 17 (array([ 158.71336761, -267.92673522]), 341.52322502693187), 18 (array([ 2.05000000e+01, -1.51647064e+05]), 151687.0644000551), 19 (array([ 2009.9546199 , 23322.91913471]), 23366.95409612065), 20 (array([ 2017.2034683 , 24933.19903019]), 24973.910593115572), 21 (array([ 20.5, -2142.1]), 2182.120679522781)] 22>>> print(min(hyp_list, key=lambda x: x[1])) 23(array([15.04347826, 19.41304348]), 20.98028825526718)

投稿2020/12/29 04:32

ppaul

総合スコア24670

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問