Python 优化选择最佳行
我有一个二维数组,看起来像这样:Python 优化选择最佳行,python,algorithm,optimization,Python,Algorithm,Optimization,我有一个二维数组,看起来像这样: 243 432 342 540 150 250 430 100 . . . . . . . . 现在我必须从给定的2d数组中选择一个“整行”,这是“最好的”。“最佳”定义为选择一行,其中第一列是第一列中所有值的最大值(或最接近最大值),第二列是第二列中所有值的最小值(或最接近最小值) 有没有最好的方法来执行这个操作,最好是用python 编辑:在选择行时,第二列的权重更大,为什么不对其排序并取第一个值?可以使用提供排序值的键函数 myData
243 432
342 540
150 250
430 100
. .
. .
. .
. .
现在我必须从给定的2d数组中选择一个“整行”,这是“最好的”。“最佳”定义为选择一行,其中第一列是第一列中所有值的最大值(或最接近最大值),第二列是第二列中所有值的最小值(或最接近最小值)
有没有最好的方法来执行这个操作,最好是用python
编辑:在选择行时,第二列的权重更大,为什么不对其排序并取第一个值?可以使用提供排序值的键函数
myData = [
[1.0, 2.0, 3.0, 4.0],
[1.1, 2.1, 3.1, 4.1],
[1.2, 2.2, 3.2, 4.2],
[1.3, 2.3, 3.3, 4.3]
]
w1 = 1 # First column weight
w2 = 2 # Second column weight
myRow = sorted(myData, key=lambda x: w2 * x[1] - w1 * x[0])[0]
print(myRow)
如果没有对数据的任何限制,就无法在比线性时间更快的时间内完成此操作
def mycmp(a,b):
ret=cmp(a[1]-minval,b[1]-minval)
如果ret!=0:
回程网
返回cmp(maxval-a[0],maxval-b[0])
matrix.sort(cmp=mycmp)
打印“最优:”,矩阵[0]
请注意,这不是最佳算法,但它相当接近。您有更好的度量方法吗?您有一个不是很清楚的度量方法吗?你能把第一列和第二列的差值取出来,然后找出最大值吗?“最佳”没有精确定义。如果一行具有第二高和第二低的值,而另一行具有最高和第三低的值,那么什么是最好的?上一个问题的答案是否取决于到这些值中的最大值/最小值的距离?第二列在选择过程中具有更大的权重。假设您递给我一张打印有阵列数据的纸。您对我的指示是什么,这样我就可以找到“最佳”行,而无需再问您任何问题?应该是:找到第一个值在其列中为最大值(或最接近最大值),第二个值在其相应列中为最小值(或最接近最小值)的行*()=精确对不可用的地方在
myData=[[1.0,2.0],[1.1,2.0]]上此失败@jazzpi在中失败?这些数据给了我[1.1,2.0]
,据我所知,这是正确的。它给了我[1.0,2.0]
。你确定你复制了准确的代码吗?因为areverse=True
为我提供了正确的结果。@jazzpi你说得对,在SO中键入时交换了标记。感谢您的捕获,它已编辑。“排序”将根据条件对整个数组进行排序,即nlogn。但是,您不需要排序,只需要“最佳”行。因此,检查每一行并返回由以下条件计算的最大值:w2*x[1]-w1*x[0]注意,list.sort
将列表排序到位,这可能会带来不便。通常使用排序
更方便。