2015-01-28 2 views
2

Каков наилучший способ заполнения нескольких диагональных элементов (но не всех) 2-мерного массива numpy. Я знаю, что numpy.fill_diagonal - это рекомендуемый способ заполнить все диагональные элементы.Заполнение нескольких диагональных элементов двумерного массива numpy

В настоящее время я просто с помощью цикла:

for i in a_list_of_indices: a_2d_array[i,i] = num 

Если массив велик и число диагональных элементов, подлежащих заполнению также велико, есть лучший способ, чем выше.

ответ

0

Вы можете использовать это без зацикливания:

a_2d_array[a_list_of_indices,a_list_of_indices] = num 

Пример:

a_2d_array = np.zeros((5,5)) 
a_list_of_indices = [2, 3] 

возвращается:

array([[ 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 0.], 
     [ 0., 0., 1., 0., 0.], 
     [ 0., 0., 0., 1., 0.], 
     [ 0., 0., 0., 0., 0.]]) 
+1

Просто для справки других, это работает так же для ** н- то есть 'a_3d_array [[1, 2], [1, 2], [1, 2]] = 9' делает' a_3d_array [1, 1, 1] 'и' a_3d_array [2, 2, 2] 'равно '9' – Betaxpression

Смежные вопросы