python min函数求多维列表最小值的坑

记录一下我踩的坑,都是代码基础不扎实的报应。

想求一个二维列表的最小值,于是直接用了min 函数,但对一个二维列表用min函数,返回的是包含最小值的子列表,而不是最小值本身。

导致我后面用这个最小值跟其他值比较时报错:

  File "/home/ubuntu/wzk/gcl/new4_syntheticLR/craft_training.py", line 529, in split_and_choose_bins
    if min_fid <= value <= min_fid+5 :
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

意思是我用了一个多元素的数组与标量进行比较,这样会导致数组的每个元素与标量比较,得到的是一个布尔值数组,而不是一个布尔值,因此if语句无法判断。

 

min_fid = min(first_fid_scores)    
second_fid_scores = []
second_bins = []
            
for i,row in enumerate(first_fid_scores):
    for j,value in enumerate(row):
        if min_fid <= value <= min_fid+5 :
            second_fid_scores.append(value)
            second_bins.append(first_bins[i][j])

这是我代码出错的地方,刚开始我以为出错的是value,以为first_fid_score是三维的,导致value是一个列表,但我检查后没发现问题,但发现first_bin多了一维,于是改了first_bin。但运行了十个小时候,代码到了这个地方又出错了,我反复检查,怎么也没有想到,原来是min_fid求错了。

我直觉上以为min函数可以像np.min函数一样,直接返回多维列表的最小值,没想到它居然返回的是子列表。

可以有以下2种改法:

1.双重min:

min_fid  = min(min(first_fid_scores))

first_fid_scores是二维的,第一个min返回了包含最小值的子列表,那么对这个子列表再求最小值便可得到first_fid_scores的最小值。

2.把列表展开,对所有元素求min

# 将first_fid_scores展平成一个列表
all_values = [value for sublist in first_fid_scores for value in sublist]

# 计算所有值中的最小值
min_fid = min(all_values)

一个小错误浪费我两天时间......希望别再犯类似

2024.5.23 第三篇笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值