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)
,那么答案在很大程度上取决于您特定问题的细节。