gpt4 book ai didi

python - 如何从python的多个列表中的矩阵中找到最小值?

转载 作者:行者123 更新时间:2023-12-04 09:11:23 24 4
gpt4 key购买 nike

我有 3 个价格表:

iexMin =  [20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20]
withLimit = [0.649, 1.298, 1.298, 2.538, 2.596, 2.596, 2.560, 2.560, 0.560, 1.682, 1.682, 2.242, 2.242, 2.242, 2.287, 2.592, 2.388, 2.98, 3.29, 3.299]
beyondLimit = [0.66, 2.30134, 2.30155, 2.30171, 2.955, 2.51, 2.519, 2.51, 1.749, 1.749, 1.749, 1.745, 1.749, 1.82208, 1.8993, 1.899, 2.29657, 2.29659, 2.29692, 2.30931]
我将它们分成 4 组,每组 5 个元素,然后按降序对它们进行排序,以从每个列表中获取最小的前 4 个最小值,然后比较所有列表中的所有最小值:
n = 5
a = [iexMin[i:i + n] for i in range(0, len(iexMin), n)]
b = [withLimit[i:i + n] for i in range(0, len(iexMin), n)]
c = [beyondLimit[i:i + n] for i in range(0, len(iexMin), n)]

testList1 = [sorted(block)[:4] for block in a]
testList2 = [sorted(block)[:4] for block in b]
testList3 = [sorted(block)[:4] for block in c]

price1 = [item for t in testList1 for item in t]
price2 = [item for t in testList2 for item in t]
price3 = [item for t in testList3 for item in t]

minRate = [min(price1[i],price2[i],price3[i]) for i in range(len(price1))]
输出:
min rate =  [0.649, 1.298, 1.298, 2.30171, 0.56, 1.682, 2.51, 2.51, 1.682, 1.749, 1.749, 1.82208, 1.899, 2.29657, 2.29659, 2.29692]
这个输出的唯一问题是我没有在这里比较整个矩阵。正如我在开始时所说的那样,我将列表分成 5 个元素的 4 个块,所以基本上我想一次比较整个块和每个块的 5 分钟值。所以预期的输出将如下所示:
IEXMin = [[20, 20, 20, 20], [20, 20, 20, 20], [20, 20, 20, 20], [20, 20, 20, 20]]
withinLimit = [[0.649, 1.298, 1.298, 2.538], [0.56, 1.682, 2.56, 2.56], [1.682, 2.242, 2.242, 2.242], [2.388, 2.592, 2.98, 3.29]]
beyondLimit = [[0.66, 2.30134, 2.30155, 2.30171], [1.749, 1.749, 2.51, 2.51], [1.745, 1.749, 1.749, 1.82208], [1.899, 2.29657, 2.29659, 2.29692]]

##Expected Answer##
min rate = [0.649, 0.66, 1.298, 1.298, 0.56, 1.682, 1.749, 1.749, 1.682, 1.745, 1.749, 1.749, 1.899, 2.29657, 2.29659, 2.29692]
因此,正如您所看到的,我实际上想一次比较块并从每个块中获取前 4 分钟的值。有人可以帮忙吗?

最佳答案

我认为您做了一些额外的工作,因此使事情变得复杂。这是解决它的一种方法:
使用您的代码:

n = 5
a = [iexMin[i:i + n] for i in range(0, len(iexMin), n)]
b = [withLimit[i:i + n] for i in range(0, len(iexMin), n)]
c = [beyondLimit[i:i + n] for i in range(0, len(iexMin), n)]

然后,
minRate = [sorted(a+b+c)[:4] for a,b,c in zip(a, b, c)]
minRate = [item for each in minRate for item in each]
print(minRate)
输出: [0.649, 0.66, 1.298, 1.298, 0.56, 1.682, 1.749, 1.749, 1.682, 1.745, 1.749, 1.749, 1.899, 2.29657, 2.29659, 2.29692]原始代码中的错误是您比较了三个列表(最后一行)中相同索引处的元素,然后增加了索引。
更新:如何sorted(a+b+c)工作?
首先, a,b,c在列表理解中对应于列表的块 a , b , c你定义的。我刚刚发现重用 a,b,c更方便,但我肯定可以使用更好的名字。
现在让开, +运算符实际上将列表连接在一起。 [1,1]+[1,1]会给 [1,1,1,1] , 例如。所以我将这些块连接成一个,然后对它们进行排序并选择最低的 4- sorted(a+b+c)[:4] .
使用 numpy 时的注意事项:使用 +带有 numpy 数组的运算符会将它们添加为向量。因为在这里我可以从你的理解中推断出它不是一个 numpy 数组,所以我使用了 Python 列表运算符 +以获得所需的结果。

关于python - 如何从python的多个列表中的矩阵中找到最小值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63342683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com