迭代列表和数组

时间:2015-11-04 09:33:33

标签: python loops matrix

我想创建一个迭代列表和矩阵的函数,并根据公式返回值:

  

矩阵单元格值 - 列表值

代码如下所示:

def calculate(matrix, list):
    out_matrix = np.empty_like(matrix)
    for k in list:
        for i in matrix.shape[0]:
            for j in matrix.shape[1]:
                out_matrix[i,j] = matrix[i,j] - k

    return out_matrix

此代码迭代列表中每个值的所有矩阵。但我需要增加我的值才能只计算一次。我想要的是为列表中的每个位置迭代矩阵一次。

例如:

list = [1, 2, 3, 4, 5, 6]

matrix = np.array([(1,2,3),
                   (4,5,6)])

返回的值应为:

matrix[0,0] - list [0] = 1 -1 = 0
matrix[0,1] - list [1] = 2 -2 = 0
.....etc

out_matrix会将这些值存储在与输入矩阵相同的位置。 谢谢您的帮助! :)

2 个答案:

答案 0 :(得分:2)

您可以通过执行以下操作来避免所有混乱的循环:

(matrix.ravel() - np.asarray(list)).reshape(matrix.shape)

答案 1 :(得分:1)

你应该使用两个循环。使用此公式获取正确的列表元素i * matrix.shape[1] + j。另据我所知,numpy.ndarray.shapeint,您应该在循环中包含range。尝试:

def calculate(matrix, list):
    out_matrix = np.empty_like(matrix)
    for i in range(matrix.shape[0]):
        for j in range(matrix.shape[1]):
            out_matrix[i, j] = matrix[i, j] - list[i * matrix.shape[1] + j]

    return out_matrix