更改 numpy 数组列表中的特定元素

Changing specific elements in a list of list of numpy arrays

我有一个 numpy 数组列表列表。我想遍历列表列表并更改某些元素。下面是一个例子,但只有整数:

    a = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]

    print(a)

    for i in range(len(a)):
         for j in range(i+1):
                if i == j:
                    a[i][j] = 100

    print(a)
This is the output:[[1, 1, 1], [1, 1, 1], [1, 1, 1]][[100, 1, 1], [1, 100, 1], [1, 1, 100]]

i==j 元素已更改为其他元素。当我 运行 完全相同的代码逻辑,但使用 2x2 numpy 数组时,我无法让它做同样的事情:

    L=3
    I = np.eye(2, dtype = int)
    sigplus = np.array([[0,2],[0,0]])
    plusoperatorlist=[[I]*L]*L

    print(plusoperatorlist)
    for i in range(len(plusoperatorlist)):
        for j in range(i+1):
                if i == j:
                    plusoperatorlist[i][j] = sigplus
    
    print(plusoperatorlist)
This is the output:[[array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]])], [array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]])], [array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]]), array([[1, 0],[0, 1]])]][[array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]])], [array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]])], [array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]]), array([[0, 2],[0, 0]])]]

它将每个元素更改为我定义的矩阵 sigplus。期望的输出是仍然有单位矩阵列表的列表,但是在列表列表中的 i==j 位置有 sigplus 矩阵。非常感谢您的帮助:)

我已经概述了我在上面尝试过的方法。

问题是您通过乘以原始列表创建了一个嵌套列表。对原始列表的引用在幕后将保持不变,这意味着看似更改其中一个列表实际上会更改所有列表。尝试像这样生成嵌套列表:

plusoperatorlist= [[I for _ in range(L)] for _ in range(L)]

现在,每个嵌套列表都有自己的引用,可以独立更改。