替换 numpy 数组的行
Replacing rows of a numpy array
我正在尝试针对不定数量的变量模拟 Cramer 规则。这是我目前所拥有的
def cramers(n)
matrix = []
for i in range(0, n):
matrix.append([])
for j in range(0, n+1):
matrix[i].append(0)
matrix[i][j] = float(input("V" + str(i+1) + str(j+1) + ": "))
#n = 2, V11 = 1, V12 = 2, V13 = 3, V21 = 4, V22 = 5, V23 = 6
mat = np.array(matrix)
matA = mat[0:n, 0:n]
matB = mat[0:n, n:]
matATrans = matA.transpose()
matBTrans = matB.transpose()
对于 n = 2,这些是 matATrans 和 matBTrans 的示例输入值:
matATrans = [[1. 4.], [2. 5.]]
matBTrans = [3. 6.]
我的问题是,如何生成一个 numpy 数组 mat,例如 n = 2 长度,其值包含这个?
mat = [[[3. 6.],[2. 5.]],[[1. 4.],[3. 6.]]]
基本上,matATrans 的第 (n-1) 个元素被 matBTrans 替换了。我认为可以使用 forloop 来完成。这是我的尝试。
for i in range(n):
matATrans[i] = matBTrans
print(matATrans)
结果是这样的:
[3. 6.],[2. 5.]
[3. 6.],[3. 6.]
很明显,这是错误的,因为在第一个循环中,matATrans 的内容已被更改。此外,它仍然没有附加到垫矩阵。
请赐教。谢谢
在 python 中,当您将列表分配给新变量时,您只是在创建对同一对象的另一个引用,这就是当前行为的原因。解决此问题的一种方法是使用 copy
方法并在每个循环中复制矩阵 A。
n = 2
matATrans = [[1, 4], [2, 5]]
matBTrans = [3, 6]
result = []
for i in range(n):
temp = matATrans.copy()
temp[i] = matBTrans
result.append(temp)
print(result)
我正在尝试针对不定数量的变量模拟 Cramer 规则。这是我目前所拥有的
def cramers(n)
matrix = []
for i in range(0, n):
matrix.append([])
for j in range(0, n+1):
matrix[i].append(0)
matrix[i][j] = float(input("V" + str(i+1) + str(j+1) + ": "))
#n = 2, V11 = 1, V12 = 2, V13 = 3, V21 = 4, V22 = 5, V23 = 6
mat = np.array(matrix)
matA = mat[0:n, 0:n]
matB = mat[0:n, n:]
matATrans = matA.transpose()
matBTrans = matB.transpose()
对于 n = 2,这些是 matATrans 和 matBTrans 的示例输入值:
matATrans = [[1. 4.], [2. 5.]]
matBTrans = [3. 6.]
我的问题是,如何生成一个 numpy 数组 mat,例如 n = 2 长度,其值包含这个?
mat = [[[3. 6.],[2. 5.]],[[1. 4.],[3. 6.]]]
基本上,matATrans 的第 (n-1) 个元素被 matBTrans 替换了。我认为可以使用 forloop 来完成。这是我的尝试。
for i in range(n):
matATrans[i] = matBTrans
print(matATrans)
结果是这样的:
[3. 6.],[2. 5.]
[3. 6.],[3. 6.]
很明显,这是错误的,因为在第一个循环中,matATrans 的内容已被更改。此外,它仍然没有附加到垫矩阵。
请赐教。谢谢
在 python 中,当您将列表分配给新变量时,您只是在创建对同一对象的另一个引用,这就是当前行为的原因。解决此问题的一种方法是使用 copy
方法并在每个循环中复制矩阵 A。
n = 2
matATrans = [[1, 4], [2, 5]]
matBTrans = [3, 6]
result = []
for i in range(n):
temp = matATrans.copy()
temp[i] = matBTrans
result.append(temp)
print(result)