为了账号安全,请及时绑定邮箱和手机立即绑定

numpys张量点的向量化计算

numpys张量点的向量化计算

精慕HU 2023-06-27 18:35:50
我有两个向量,分别包含形状(3,3)和形状张量(3,3,3,3)。这些向量具有相同的长度,我正在计算这两个向量的逐元素张量点。例如,想要对以下计算进行矢量化以提高性能:a = np.arange(9.).reshape(3,3)b = np.arange(81.).reshape(3,3,3,3)c = np.tensordot(a,b)a_vec = np.asanyarray([a,a])b_vec = np.asanyarray([b,b])    c_vec = np.empty(a_vec.shape)for i in range(c_vec.shape[0]):    c_vec[i, :, :] = np.tensordot(a_vec[i,:,:], b_vec[i,:,:,:,:])print(np.allclose(c_vec[0], c))# True我考虑过使用numpy.einsum但无法找出正确的下标。我尝试了很多不同的方法,但到目前为止都失败了:# I am trying something like thisc_vec = np.einsum("ijk, ilmno -> ijo", a_vec, b_vec)print(np.allclose(c_vec[0], c))# False但这并不能重现我上面想要的迭代计算。如果使用 einsum 无法完成此操作,或者有更高效的方法可以完成此操作,我愿意接受任何类型的解决方案。
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

矢量化方式np.einsum是 -

c_vec = np.einsum('ijk,ijklm->ilm',a_vec,b_vec)


查看完整回答
反对 回复 2023-06-27
?
千万里不及你

TA贡献1784条经验 获得超9个赞

tensor_dot有一个axes你也可以使用的参数:

c_vec = np.tensordot(a_vec, b_vec, axes=([1, 2], [1, 2]))


查看完整回答
反对 回复 2023-06-27
  • 2 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信