首页 > 解决方案 > 如何用python中的索引数组替换二维数组的值

问题描述

我打算根据索引数组替换特定索引的值。原来的二维数组是这样的:

    A=    [[0.         0.         0.         0.         0.         0.         0.        ]    

           [0.         1.98019867 1.96039735 1.90331502 1.81546888 1.70634771 0.        ]

           [0.         2.         1.98019867 1.92311635 1.83527021 1.72614904 0.        ]

           [0.         1.98019867 1.96039735 1.90331502 1.81546888 1.70634771 0.        ]

           [0.         1.92311635 1.90331502 1.84623269 1.75838656 1.64926538 0.        ]

           [0.         1.83527021 1.81546888 1.75838656 1.67054042 1.56141925 0.        ]

           [0.         0.         0.         0.         0.         0.         0.        ]]

这是索引数组(在每一行中,每对表示一个索引)

    index=[[1 2]
 [2 4]
 [3 4]
 [3 5]
 [4 2]
 [5 2]
 [5 5]]

我想将数组 A 中这些索引的值替换为:

zero=0

我希望最终结果是这样的:

modified_A=    [[0.         0.         0.         0.         0.         0.        0.        ]

                [0.         1.98019867 1.96039735 1.90331502 1.81546888 1.70634771 0.      ]      

                [0.         2.         1.98019867 1.92311635 0.         1.72614904 0.      ]

                [0.         1.98019867 1.96039735 1.90331502 0.         0.         0.      ]

                [0.         1.92311635 0.         1.84623269 1.75838656 1.64926538 0.      ]

                [0.         1.83527021 0.        1.75838656 1.67054042 0.          0.      ]

                [0.         0.         0.         0.         0.         0.         0.      ]]

标签: pythonarraysnumpyindexing

解决方案


您可以使用非常简洁的表示法,例如arr[ind],如果您ind将元组作为包含沿连续轴的连续“想要”元素的索引的元组。

要从索引列表中生成这样的元组,您可以运行:

ind = tuple(np.array(index).T)

结果是:

(array([1, 2, 3, 3, 4, 5, 5]), array([2, 4, 4, 5, 2, 2, 5]))

然后,将0放在想要的位置运行:

arr[ind] = 0

对于一些随机源数组(所有边缘都为零),例如您的源数据样本,我得到:

array([[0.    , 0.    , 0.    , 0.    , 0.    , 0.    , 0.    ],
       [0.    , 1.5488, 0.    , 1.6028, 1.5449, 1.4237, 0.    ],
       [0.    , 1.6459, 1.4376, 1.8918, 0.    , 1.3834, 0.    ],
       [0.    , 1.7917, 1.5289, 1.568 , 0.    , 0.    , 0.    ],
       [0.    , 1.0871, 0.    , 1.8326, 1.7782, 1.87  , 0.    ],
       [0.    , 1.9786, 0.    , 1.4615, 1.7805, 0.    , 0.    ],
       [0.    , 0.    , 0.    , 0.    , 0.    , 0.    , 0.    ]])

每个非零元素的值并不重要。请注意,您的“想要的”元素已设置为0


推荐阅读