Есть ли эффективный способ сделать следующее: Предположим, у меня есть вектор A
длины n, я хочу вычислить второй вектор B
, где
B[i] = A[0] * A[1] * .. *A[i-1] * A[i+1] *..*A[n-1]
, т. Е. B [ i] - умножение всех элементов в A, кроме i'м вяза enet. Сначала я думал о том, чтобы сделать что-то вроде:
C = np.prod(A)
B = C/A
Но потом у меня возникла проблема, когда у меня есть элемент A, равный нулю. Конечно, я могу выяснить, есть ли у меня один ноль, а затем сразу установить B в качестве вектора, состоящего из всех нулей, за исключением этого единственного нуля, и поместить туда кратное от остальной части A, а в случае более 1 ноля - обнулить B полностью. Но это становится немного громоздким, когда я хочу выполнить эту операцию для каждой строки в матрице, а не только для одного вектора. Конечно, я могу сделать это в al oop, но мне было интересно, есть ли более эффективный способ?