【发布时间】:2021-10-04 12:51:30
【问题描述】:
让A 是一个二维矩阵。如何计算矩阵B,使得B 的每个元素都是A 同一行中所有其他条目的乘积?
例子:
A = np.array([[5, 0, 6], # the input
[3, 1, 9],
[2, 0, 0]])
B = np.array([[0, 30, 0], # the result
[9, 27, 3],
[0, 0, 0]])
天真的策略 (B = np.prod(A, axis=-1, keepdims=True) / A) 会遇到除零错误,不幸的是,这些零在程序的其他地方很重要,不能轻易地用微小的 epsilon 替换。
我已经尝试使用np.where 来解决这三种情况(没有零的行、有一个零的行、有多个零的行),但是尽管这可以防止输出中出现 NaN,但它仍然需要在让np.where 按元素进行挑选,这似乎需要大量代码和不必要的计算工作(并且在此过程中仍会产生 div-by-zero 警告)。
解决这个问题的最聪明、最快的方法是什么?
【问题讨论】: