繁体   English   中英

错误:只能将大小为 1 的数组转换为 Python 标量

[英]Error: can only convert an array of size 1 to a Python scalar

我有这个代码:

min_fit=np.min(fitness_viz) 
viz_min_fit=np.where(fitness_viz==min_fit)
index=np.asscalar(viz_min_fit[0])
tabu_list[0][1]=pair_ejec_cell_area[index][1]

目标是在数组(fitness_viz 数组)中找到最小值,然后找到最小值的索引(代码的第二行)。 viz_min_fit 是一个数组,其中所有的索引都匹配fitness_viz 中的最小值。 然后,目标是使用其中一个索引作为pair_ejec_cell_area 中的索引。 当我运行它时,我收到一条错误消息,说“只能将大小为 1 的数组转换为 Python 标量”,我不明白。

有人可以帮助我吗? 谢谢!

您的索引列表可能大于一个,因此 asscalar 无法选择将哪个值转换为标量。

>>> fitness_viz = [1, 1, 2, 3, 5]
>>> min_fit=np.min(fitness_viz) 
>>> viz_min_fit=np.where(fitness_viz==min_fit)
>>> len(viz_min_fit[0])
2

所以一个解决方案是获取第一个索引:

>>> index=np.asscalar(viz_min_fit[0][:1])

请注意,自 1.16 版以来不推荐使用 asscalar,您可以改用 numpy.ndarray.item() 。

完整的解决方案是:

>>> fitness_viz = [1, 1, 2, 3, 5]
>>> min_fit=np.min(fitness_viz) 
>>> viz_min_fit=np.where(fitness_viz==min_fit)
>>> index=np.ndarray.item(viz_min_fit[0][:1]))
>>> tabu_list[0][1]=pair_ejec_cell_area[index][1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM