【问题标题】:Error: can only convert an array of size 1 to a Python scalar错误:只能将大小为 1 的数组转换为 Python 标量
【发布时间】:2022-01-18 09:58:38
【问题描述】:

我有这个代码:

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 标量”,我不明白。

有人可以帮我吗?谢谢!

【问题讨论】:

  • 此时viz_min_fit[0] 的值是多少?尝试打印它,或者更好地使用调试器检查它

标签: python numpy numpy-ndarray


【解决方案1】:

您的索引列表可能大于一个,因此 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])

注意 asscalar 自 1.16 版起已弃用,您可以使用 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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多