我想创建一个迭代列表和矩阵的函数,并根据公式返回值:
矩阵单元格值 - 列表值
代码如下所示:
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会将这些值存储在与输入矩阵相同的位置。 谢谢您的帮助! :)
答案 0 :(得分:2)
您可以通过执行以下操作来避免所有混乱的循环:
(matrix.ravel() - np.asarray(list)).reshape(matrix.shape)
答案 1 :(得分:1)
你应该使用两个循环。使用此公式获取正确的列表元素i * matrix.shape[1] + j
。另据我所知,numpy.ndarray.shape
是int
,您应该在循环中包含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