我打算根据索引数组替换特定索引的值。原来的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。