关于矩阵运算的一个问题

设矩阵 A_{m\times n} ,现在对 A 中的每一个元素进行更新生成矩阵 B ,更新方法是 B_{ij}=A_{ij}\sum_{k=1}^n\frac{1}{A_{ik}} ,例如下面的矩阵为 A ,则 B_{2,2}=5\times(\frac{1}{4}+\frac{1}{5}+\frac{1}{6})=\frac{37}{12} ,如何不用 for 高效实现?

\left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right] \
>>>A = np.arange(1,10).reshape(3,-1)
>>>B = A*(1/A).sum(1).reshape(-1,1)
1赞
A= np.arange(1,10).reshape([3,3])
B = np.array([A/np.tile(A[:,i].reshape(3,1),(1,3)) for i in range(3)])
C = np.sum(B,axis=0)

这个方法是最好的,不过sum(1)最好写成sum(axis=1)这样更好理解是往1轴进行求和。另外补充下思路:

  1. 1/A能得到1/Aij的矩阵
  2. sum(axis=1)能得到1/Aij在1轴上加的结果
  3. 2步骤得到的矩阵是(3, )而我们要往1轴方向进行乘法需要(3,1)的矩阵,故需要转换一下
  4. 最后跟原来的矩阵相乘即可了
1赞

谢谢各位大佬们的解答