python - 从两个矩阵乘积的条目填充 4d 数组的有效方法

标签 python arrays numpy vectorization

标题可能没有我希望的那么准确,但这就是问题所在。基本上我从两个矩阵的乘积条目中填充一个 4d numpy 数组。现在的代码如下:

M = P.dot(U)
C_arr = np.zeros((b_size,b_size,N,N))
  for alpha in xrange(b_size):
      for beta in xrange(b_size):
          for i in xrange(N):
              for j in xrange(N):
                  C_arr[alpha,beta,i,j] = np.conjugate(M[i,alpha])*M[j,beta]

事实证明,这个函数被调用得相当频繁,而且看起来非常耗时。我刚开始使用 Python,我怀疑可能有一种更有效的方法可以通过避免这些循环来编写此函数,但我自己还没有弄清楚...

最佳答案

您可以使用 numpy.einsum :

C = np.einsum('ia,jb->abij', M.conj(), M)

或者,由于没有计算实际总和(即,这是外积的一种形式),您可以在适本地 reshape 输入矩阵 M 后使用带有常规数组乘法的 numpy 广播:

nrows, ncols = M.shape
C = M.T.reshape(1, ncols, 1, nrows) * M.T.conj().reshape(ncols, 1, nrows, 1)

关于python - 从两个矩阵乘积的条目填充 4d 数组的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31271039/

相关文章:

c++ - 卡在阵列上

python - 做ILP时的多种解决方案

python - 在 python (cv2) 中使用 OpenCV 增加彩色图像对比度的最快方法是什么?

python - Flask 应用程序停止使用 gunicorn 和主管与数据库通信

arrays - 查找数组中符合条件的中间值

java - 如何在数组中存储多个值(具有不同类型)并将其打印出来?

python - 具有强制数据类型和维度的输入 numpy 数组的文档字符串格式

python - matplotlib 表被裁剪

python - 有没有更快的方法从字节数组复制到 Python 中的 mmap 切片?

python - 如何将列添加到 pandas 中的数据框