0

已经很晚了,所以我不知道这会有多清楚。

我有一个函数 f(x),我想从 f(x) 达到最小负值的列表中获取 x 的值,即:

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

在这种情况下,我想要返回 x 中的值 4,这给了我 -3。我不想要绝对最小值(-1000),而是绝对值最低的负值。

我希望这是有道理的,非常感谢您的帮助。

更新

我试图简化问题,也许太多了。事情是这样的:我有一个形成多边形的二维点列表,我想顺时针排列它们。

为此,我取每个点与其余点之间的叉积,并根据从前一个点获得负叉积(告诉我旋转感)并且绝对值最小(告诉我它)来选择下一个点真的是下一点)。

所以,说:

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

2
a = [0, 2, 4, 6]
b = [200, 0, -3, -1000]

value = max([x for x in b if x < 0])
print a[b.index(value)]
于 2013-09-03T05:05:35.643 回答
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

以下解决方案在大多数情况下应该可以正常工作

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

这种解决方案的一个特点是,如果有重复,即几个x' 产生相同的最大负数,它们都将被返回。

于 2013-09-03T05:12:22.843 回答
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 回答