【问题标题】:Python - Easy and Fast Way to Divide Values in a 2D List by a Single ValuePython - 将二维列表中的值除以单个值的简单快捷方法
【发布时间】:2020-03-29 15:46:43
【问题描述】:

例如,我有一个2x2 维度的2D 列表存储在变量r 中。

 12    24
 36    48

我想将列表中的每个值除以2。一种简单的慢速方法是遍历每一行和每一列,然后除以2

rows = 2
columns = 2
for x in range(rows):
    for y in range(columns):
        r[x][y] = r[x][y]/2

除了手动方法之外,是否有一种简单快捷的方法可以将2D 列表中的每个值划分为特定值?我尝试了下面的代码,但它抛出了一个错误:

 s = r /2

错误:

TypeError: unsupported operand type(s) for /: 'list' and 'int'

【问题讨论】:

  • 要更改每个单元格,您将始终必须触摸每个单元格,这将始终具有线性复杂性。您可以使用numpy 数组并利用计算机的并行处理能力来提高性能,但渐近复杂度将保持不变。
  • 使用 numpy.它使 n 维列表的计算更快、更容易,而无需使用循环。

标签: python python-3.x list


【解决方案1】:

您可以使用numpy 库来实现您想要的结果。它使用矢量化,因此它是执行操作的最快方式。

试试这个:

import numpy as np

arr = np.array(r) # --> initialize with 2d array
arr = arr / 2 # --> Now each element in the 2d array gets divided by 2

例如:

arr = np.array([[1, 2], [2, 3]]) # --> initialize with 2d array
arr = arr / 2 # --> divide by the scalar

print(arr)

输出:

[[0.5 1. ]
 [1.  1.5]]

【讨论】:

    【解决方案2】:

    看起来官方文档中甚至有一节关于嵌套列表推导:

    https://docs.python.org/3/tutorial/datastructures.html#nested-list-comprehensions

    >>> r = [[12,24],[36,48]]
    >>> [[i/2 for i in a] for a in r]
    [[6.0, 12.0], [18.0, 24.0]]
    

    【讨论】:

      【解决方案3】:
      import numpy as np
      x=np.array(2D_list)
      x=x/2
      

      【讨论】:

        猜你喜欢
        • 2014-05-17
        • 1970-01-01
        • 2018-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多