我试图计算一个复杂的2D数组x
的成对np.vdot
。所以我想要的行为是:
X = np.empty((x.shape[0], x.shape[0]), dtype='complex128')
for i in range(x.shape[0]):
for j in range(x.shape[0]):
X[i, j] = np.vdot(x[i], x[j])
有没有办法不用显式循环就可以做到这一点?我尝试使用来自sklearn
的pairwise_kernel
,但它假定输入数组是实数。我也尝试过广播,但是vdot
会使输入变平。在
要将} ,我直接借用了^{} 的共轭思想,如下-
np.vdot
扩展到所有行,可以使用^{基本上使用}共轭版本的最后一个轴,以及数组本身,当应用于这两个轴上时。在
np.tensordot
,我们指定要缩减的轴,在本例中,这是{运行时测试-
让我们来计时^{} solution with ^{} 和本文中提出的解决方案-
^{pr2}$相当于
^{pr2}$^{}
取产品总数。下标
'ik,jk->ij'
告诉np.einsum
第二个参数,np.conj(x)
是一个下标为ik
的数组,第三个参数x
有 下标jk
。因此,计算所有的乘积np.conj(x)[i,k]*x[j,k]
i
,j
,k
。求和取重复下标k
,因此 保留i
和j
,它们将成为结果数组的下标。在例如
相关问题 更多 >
编程相关推荐