替换numpy数组的行

2024-09-26 17:45:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图模仿克莱姆的规则来处理不定数量的变量。这就是我目前所拥有的

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.]

我的问题是,如何生成一个长度为n=2的numpy数组mat,其值包含这个值

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的内容在第一个循环中被改变了。而且,它仍然没有附加到mat矩阵

请开导我。谢谢


Tags: infor数量规则defrangematrixtranspose
1条回答
网友
1楼 · 发布于 2024-09-26 17:45:37

在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)

相关问题 更多 >

    热门问题