#python #arrays #numpy #indexing
Вопрос:
Я намерен заменить значение конкретных индексов на основе массива индексов. Исходный 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. ]]
Комментарии:
1.
A[index[:,0], index[:,1]] = 0
Ответ №1:
Вы можете использовать очень краткие обозначения, например 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.