如何用python中的索引数组替换2d数组的值



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

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

如果您将ind作为元组,则可以使用非常简洁的符号,如arr[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

对于一些随机的源数组(所有边都为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

最新更新