Python 帕累托占优向量的选择

Python 帕累托占优向量的选择,python,optimization,Python,Optimization,我想比较两个向量。该矢量表示两种备选方案: def select_dominant(a,b): comp=a>b if(comp): return a elif(a<b): return b else: return "indifferent" a=[1,10,1] b=[1,1,10] print(select_dominant(a,b)) def选择(a,b): comp=a>b 如果(公司):

我想比较两个向量。该矢量表示两种备选方案:

def select_dominant(a,b):
    comp=a>b
    if(comp):
        return a
    elif(a<b):
        return b
    else:
        return "indifferent"

a=[1,10,1]
b=[1,1,10]
print(select_dominant(a,b))
def选择(a,b):
comp=a>b
如果(公司):
归还

elif(a看起来您希望对两个列表进行元素比较。如果全部
a
中的值大于或等于
b
中的相应值,则 返回
a
,如果小于或等于,返回
b
,否则返回
“无关”

您可以将
=
运算符应用于
a
b
的每个元素,如下所示:

In [247]: a = [1,10,1]

In [248]: b = [1,1,10]

In [249]: map(operator.ge, a, b)
Out[249]: [True, True, False]
您可以使用
all
测试所有值是否都
True

In [250]: all(map(operator.ge, a, b))
Out[250]: False
因此,如果您定义:

import operator
def select_dominant(a,b):
    ge = all(map(operator.ge, a, b))
    le = all(map(operator.le, a, b))
    return a if ge else b if le else 'indifferent'
然后


表情

a if ge else b if le else 'indifferent'
是所谓的。 这是一种生成此代码将分配给
值的相同值的简便方法

if ge:
    value = a
elif le:
    value = b
else:
    value = 'indifferent'

看起来您希望对两个列表进行元素比较。如果所有
a
中的值大于或等于
b
中的相应值,则 返回
a
,如果小于或等于,返回
b
,否则返回
“无关”

您可以将
=
运算符应用于
a
b
的每个元素,如下所示:

In [247]: a = [1,10,1]

In [248]: b = [1,1,10]

In [249]: map(operator.ge, a, b)
Out[249]: [True, True, False]
您可以使用
all
测试所有值是否都
True

In [250]: all(map(operator.ge, a, b))
Out[250]: False
因此,如果您定义:

import operator
def select_dominant(a,b):
    ge = all(map(operator.ge, a, b))
    le = all(map(operator.le, a, b))
    return a if ge else b if le else 'indifferent'
然后


表情

a if ge else b if le else 'indifferent'
是所谓的。 这是一种生成此代码将分配给
值的相同值的简便方法

if ge:
    value = a
elif le:
    value = b
else:
    value = 'indifferent'

根据应用程序的不同,您可能需要列表相等的情况。@unutbu,这是比较两个向量之间优势的最快方法吗?我不能告诉您什么是最快的,但在某些情况下使用NumPy的
np。更大的_equal
可能更快——特别是当数据已经在NumPy数组中时,数组很大,或者如果您可以使用数组对数据进行加密,以便在大型数组上调用
np.greater_equal
一次,而不是调用
map(operator.ge,a,b)
多次。因此,答案在很大程度上取决于您特定问题的细节。根据应用程序,您可能需要列表相等的情况。@unutbu,这是比较两个向量之间优势的最快方法吗?我不能告诉您什么是最快的,但在某些情况下使用NumPy的
np。更大的_equal
可能更快--特别是如果数据已经在一个NumPy数组中,那么数组是大的,或者如果您可以在大数组上调用一次
np.greater_equal
,而不是多次调用
map(operator.ge,a,b)
,那么答案在很大程度上取决于您特定问题的细节。