У меня есть матрица
A = np.array([[0.2, 0.4, 0.6],
[0.5, 0.5, 0.5],
[0.6, 0.4, 0.2]])
Я хочу новую матрицу, где значение записи в строке я и столбце j является произведением всех записей i-й строки A, за исключением ячейки этой строки в j-ом столбце.
array([[ 0.24, 0.12, 0.08],
[ 0.25, 0.25, 0.25],
[ 0.08, 0.12, 0.24]])
Решение, которое впервые возникло у меня, было
np.repeat(np.prod(A, 1, keepdims = True), 3, axis = 1) / A
Но это работает только до тех пор, пока никакие записи не будут иметь нулевое значение.
Любые мысли? Спасибо!
Изменить: я разработал
B = np.zeros((3, 3))
for i in range(3):
for j in range(3):
B[i, j] = np.prod(i, A[[x for x in range(3) if x != j]])
но, конечно, есть более элегантный способ выполнить это, что позволяет использовать эффективный с поддержкой numpy C backend вместо неэффективных петель python?