Я пытаюсь изменить значения в матрице a с заданной индексной матрицей d и матрицей e.
И матрица всегда должна быть симметричной.
Что я придумаю, это перезаписать первичную матрицу с заданным индексом, и попытайтесь сделать ее симметричной, затем go для другой перезаписи, пока не будет пройдена вся заданная индексная матрица. Это не эффективно.
Но я застрял с тем, как сделать его симметричным.
Например:
a = np.ones([4,4],dtype=np.object) #the primal matrix
d = np.array([[1],
[2],
[0],
[0]]) #the first index matrix
a[np.arange(a.shape[0])[:,None],d] =2 #the element change to 2 with the indexes shown in d matrix
Теперь результат:
a = np.array([[1 2 1 1]
[1 1 2 1]
[2 1 1 1]
[2 1 1 1]])
После того, как сделать его симметричным (если a [i] [j] было выбрано в матрице d, a [j] [i] также следует изменить на 2, как это сделать).
ожидаемый результат должен быть:
a = np.array([[1 2 2 2]
[2 1 2 1]
[2 2 1 1]
[2 1 1 1]])
Затем для еще одной перезаписи:
e = np.array([[0],[2],[1],[1]])
a[np.arange(a.shape[0])[:,None],e] =3
Теперь результат:
a = np.array([[3 2 2 2]
[2 1 3 1]
[2 3 1 1]
[2 3 1 1]])
Сделать это симметричным, (I не знаю, как сделать эту часть) конечный результат должен быть: (переписать значения, если они были заданы 2 или 1 раньше)
a = np.array([[3 2 2 2]
[2 1 3 3]
[2 3 1 1]
[2 3 1 1]])
Что я должен сделать, чтобы получить симметричную матрицу?
И есть ли в любом случае непосредственное изменение первичной матрицы a для получения окончательного результата? Более эффективным способом?
Заранее спасибо !!