【问题标题】:Python arrays/lists: convert total to relative valuesPython 数组/列表:将总计转换为相对值
【发布时间】:2020-06-14 22:24:40
【问题描述】:

我正在寻找最简单的方法来将 arr_A 的总值列为 arr_B 中的相对值。

我想避免使用像 value[i]/sum(arr_A) 这样的循环

注意:arr_A 是动态变化的,这只是一个简单的例子

有简单的内置函数吗?

arr_A = [2, 4, 2, 2]

#do magic

arr_B = [0.2, 0.4, 0.2, 0.2]

【问题讨论】:

  • “动态变化”是什么意思?看起来 arr_B 应该包含结果。
  • 是的,对不起,我的意思是 arr_A 正在改变 -> 改变它
  • 不过,你这是什么意思?您意识到如果它发生变化,您也必须更新arr_B
  • 这一小段代码嵌套在我的代码深处。 arr_A 不存在,它以编程方式生成一千次,每次看起来都不同。对于每个 arr_A 我必须生成一个带有相对值的 arr_B

标签: python arrays list converters


【解决方案1】:

纯 Python:

s = sum(arr_A)
arr_B = [x/s for x in arr_B]

但是对于数值运算,numpy 库是您的朋友。在 numpy 中,可以这样写:

arr_B = np.array(arr_A) / np.sum(arr_A)

【讨论】:

    【解决方案2】:

    您可以尝试将内置函数map 与 lambda 函数一起使用

    arr_B = list(map(lambda x: x/sum(arr_A), arr_A))
    

    【讨论】:

    • 这将为每个元素求和arr_A。效率不高
    • @Tomerikoo 您可以在关注效率时将sum(arr_A) 的值分配给变量。但是对于大小为 5 的列表,它在任何现代计算机上的运行时间方面都会产生不到 1 毫秒的差异。
    • 流行的观点是,理解应该优先于过滤器和映射等功能性惯用语。更短,更 Pythonic。
    • @JussiNurminen 我不同意你的说法,但 OP 明确表示他们正在寻找一个内置函数。
    • @pkqxdd 我不认为 OP 关心它在技术上是否是一个函数,只是它是内置的。
    猜你喜欢
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2022-01-05
    • 2012-07-03
    • 2021-03-22
    • 2012-06-13
    • 2011-09-23
    相关资源
    最近更新 更多