0

かなり遅いので、これがどれほど明確になるかはわかりません。

関数 f(x) があります。f(x) が最小の負の値に達するリストから x の値を取得したい、つまり:

x = [0, 2, 4, 6]
f(x) = [200, 0, -3, -1000]

この場合、何かが x の値 4 を返すようにしたいので、-3 になりました。絶対最小値 (-1000) は必要ありませんが、最小の絶対値を持つ負の値が必要です。

私はそれが理にかなっていることを願っています、あなたの助けに感謝します.

アップデート

問題を単純化しようとしていたのですが、やりすぎたのかもしれません。ここに問題があります: 多角形を形成する 2D ポイントのリストがあり、それらを時計回りに並べたいと考えています。

そのために、各点と残りの点の間の外積を取り、前の点からの負の外積 (回転の感覚を教えてくれる) を取得することに基づいて次の点を選択します。本当に次のポイントです)。

だから、言って:

x = [(1,1), (-1,-1), (-1,1), (1,-1)]

そして私は手に入れたい

x = [(1,1), (1,-1), (-1,-1), (-1,1)]

私がやっている

for point in x:
   cp = [numpy.cross(point, p) for p in x]
   # and then some magic to select the right point...

再び助けてくれてありがとう。

4

4 に答える 4

1

これを試して:

inputs = [0, 2, 4, 6]
outputs = [200, 0, -3, -1000]
max = min(outputs)
for n in outputs:
    if n >= 0:
        continue
    if n > max:
        max = n
print inputs[outputs.index(max)]
于 2013-09-03T05:03:46.033 に答える
0
x = [0, 2, 4, 6]
fx = [200, 0, -3, -1000]

print(x[fx.index(max(n for n in fx if n < 0))])
于 2013-09-03T05:19:16.780 に答える
0

ほとんどの場合、次の解決策はうまくいくはずです

    [ z for z in x if f(z) == max( f(y) for y in x if f(y) < 0 ) ]

このソリューションの特徴の 1 つは、繰り返しがある場合、つまり複数xの が同じ最大の否定を生成する場合、それらすべてが返されることです。

于 2013-09-03T05:12:22.843 に答える