加快构造大型对称矩阵的python循环

2024-04-20 05:48:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我写这段代码来创建一个对称矩阵m*m(a),其中m=1682。这段代码在Jupyter上网本(Ipython)上运行,速度非常慢。考虑到实矩阵的m=1000万,有人知道如何提高性能吗?
其他细节:

  • R是矩阵(numpy数组)n*m
  • rx是一个矩阵(numpy数组)
  • 电影是一个矩阵(numpy数组)

    def make_A(R, rx, movies):
      m = R.shape[1]
      A = np.zeros((m,m))
      for i in range(m):
        for j in range(i,m):
            if i!= j:
                ri = np.linalg.norm(R[:,i], ord=None)
                rj = np.linalg.norm(R[:,j], ord=None)
                mov1 = movies[i]
                mov2 = movies[j]
                temp = rx[(rx[:,1]==mov1) | (rx[:,1]==mov2)]
                temp = temp[:,0]
                y = np.bincount(temp.T)
                ii = np.nonzero(y)[0]
                temp = np.vstack((ii, y[ii])).T
                temp = temp[temp[:,1]==2]
                Uij = temp.shape[0]
                A[i,j]=ri*rj+Uij
      A=A + A.T - np.diag(A.diagonal())
      return A

Tags: 代码innumpyfornprange矩阵数组