在多数组python中获取min

2024-03-29 08:10:26 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,我有一个具有以下结构的多数组:

[[0, 0, 2000, 0.2, 25, 0.39784217, 0.40575236], [0, 0, 2000, 0.2, 50,
  0.31941691, 0.38137865], [0, 0, 2000, 0.2, 75, 0.2767137, 0.41646746], ...

我需要得到数组在6和7区域的最小值

例如,在上面的三个数组中,[0, 0, 2000, 0.2, 75, 0.2767137, 0.41646746]在六个字段中包含minimun,[0, 0, 2000, 0.2, 50, 0.31941691, 0.38137865]在七个字段中包含minimun

非常感谢!你知道吗

注意,安德烈斯。你知道吗


Tags: 区域数组结构minimun
3条回答
array = [[0, 0, 2000, 0.2, 25, 0.39784217, 0.40575236], 
     [0, 0, 2000, 0.2, 50, 0.31941691, 0.38137865], 
     [0, 0, 2000, 0.2, 75, 0.2767137, 0.41646746]
     ]

min_fields = []

for i in range(len(array[0])):
    field_col = [row[i] for row in array]
    min_row = field_col.index(min(field_col))
    min_fields.append([i, min_row])

这将在每一列上循环(假设所有行的长度相等)。 然后它将生成一个新的数组,它是感兴趣的列(第i列)。 然后它将找到该数组中最低值的索引,即包含该值的行。最后,它将结果附加到预定义的结果数组中。 结果如下:

[[0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 2], [6, 1]]

在每个子数组中,第一个元素表示列,第二个元素表示包含该列最低值的行。如果最低值相等,它将选取索引最低的行。你知道吗

如果您只想从1行获取此信息:

col_index = 6
col = [row[col_index] for row in array]
min_row = col.index(min(col))

这里min\u row是包含列列索引的最小值的行。你知道吗

下面是一个更好的使用numpy的方法,它不涉及for循环:

data = np.array([
    [0, 0, 2000, 0.2, 25, 0.39784217, 0.40575236],
    [0, 0, 2000, 0.2, 50, 0.31941691, 0.38137865],
    [0, 0, 2000, 0.2, 75, 0.2767137, 0.41646746],
    ...
])
has_6_min = data[:,5].argmin()
has_7_min = data[:,6].argmin()
print(data[has_6_min])
print(data[has_7_min])

您可能希望在这里研究如何使用numpy的结构化数组或记录数组,以便为第6和第7个字段指定有意义的名称。pandas也可能与你的问题有关。你知道吗

这样就可以了(使用^{}key参数):

#Suppose a is the multiarray
>>> min(a, key=lambda x: x[5])                # <- x[5] is the 6th field 
[0, 0, 2000, 0.2, 75, 0.2767137, 0.41646746]
>>> min(a, key=lambda x: x[6])                # <- x[6] is the 7th field
[0, 0, 2000, 0.2, 50, 0.31941691, 0.38137865]

(下次请澄清您的问题并提供mcve

相关问题 更多 >