我对python非常陌生,而且我有点不紧张。
我试图运行一个for循环,它为2x2数组的每个元素添加1。但是,我想在每个循环后存储每个矩阵。我正在使用.append()来执行此操作,但它似乎只能多次存储最终结果。
result = []
def f():
x= np.matrix([[1, 2],[3, 4]])
for i in range(5):
result.append(x)
x += 1
return result
function = f()
print function
但输出是:
[matrix([[6, 7],
[8, 9]]), matrix([[6, 7],
[8, 9]]), matrix([[6, 7],
[8, 9]]), matrix([[6, 7],
[8, 9]]), matrix([[6, 7],
[8, 9]])]'
这只是最后一次迭代的重复,而不是记录所有结果。 任何帮助将不胜感激。
答案 0 :(得分:0)
尝试以下方法:
InitialContext
<强>结果:强>
import numpy as np
result = []
def f():
x = np.matrix([[1, 2],[3, 4]])
for i in range(5):
result.append(x + i)
return result
res = f()
答案 1 :(得分:0)
正在发生的原因是在后端,Python通过指针处理所有内容。因此,无论何时附加x
,您只需要添加指向x
的指针。但是,然后,在每个阶段,您只是附加一个指向同一位置的指针。因此,它们都指向存储矩阵x
的最终值的矩阵。相反,您应该通过附加x.copy()来创建矩阵的副本。修改后的代码为:
result = []
def f():
x= np.matrix([[1, 2],[3, 4]])
for i in range(5):
result.append(x.copy())
x += 1
return result
function = f()
print(function)
当我在Python 3上尝试时,我得到了输出
[matrix([[1, 2],
[3, 4]]), matrix([[2, 3],
[4, 5]]), matrix([[3, 4],
[5, 6]]), matrix([[4, 5],
[6, 7]]), matrix([[5, 6],
[7, 8]])]