我有一个嵌套列表作为矩阵。对于每个列的项目,我需要应用相同的操作,但操作的一个参数取决于列,因此它是变量。并且包含在列表中。我该怎么用?
示例:
arg_list = [1,2,3]
matrix = [[1,2,3],
[1,3,5],
[6,7,2],
[1,4,2]]
减法结果:
matrix = [[0,0,0],
[0,1,2],
[5,5,-1],
[0,2,-1]]
答案 0 :(得分:4)
您可以使用 lambda表达式列表来执行您想要执行的操作:
operations = [lambda x:x*2,lambda x:x+1,lambda x:x//3]
所以这里我们将第一列乘以2,我们递增第二列,然后将第三列除以三。
现在我们可以使用以下列表推导来生成一个新矩阵:
new_matrix = [[f(x) for f,x in zip(operations,row)] for row in matrix]
说你的矩阵是:
matrix = [[1,2,3],
[1,3,5],
[6,7,2],
[1,4,2]]
然后new_matrix
是:
>>> [[f(x) for f,x in zip(operations,row)] for row in matrix]
[[2, 3, 1], [2, 4, 1], [12, 8, 0], [2, 5, 0]]
或更多语法:
new_matrix = [[2, 3, 1],
[2, 4, 1],
[12, 8, 0],
[2, 5, 0]]
如果您有通用功能:
def f(column,x):
# ... column is the index (starting by 0)
return column+x # an example
您可以使用枚举:
new_matrix = [[f(col,x) for col,x in enumerate(row)] for row in matrix]
在你的情况下,你可以这样写:
def f(column,x):
return x-arg_list[column]
答案 1 :(得分:1)
您添加的示例要么具有高度误导性,要么说明XY problem。
对于这种特定情况,您确实在进行矢量化或行操作(不确定其规范的正确的名称)。在数值计算场景下,最可读和最有效的方法是使用numpy
模块并利用它:
import numpy as np
arg_list = np.array([1,2,3])
matrix = np.array([[1,2,3],
[1,3,5],
[6,7,2],
[1,4,2]])
result = matrix - arg_list
结果是预期的矩阵:
array([[ 0, 0, 0],
[ 0, 1, 2],
[ 5, 5, -1],
[ 0, 2, -1]])
免责声明:我不回答原始问题。我为所提供的示例提供了明智的方法,也提供了一堆典型的数值计算方案。