问题标签 [tensordot]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
133 浏览

python - 将这两个向量相乘的大多数 Pythonic 方法?

我有两个形状的ndarray:

我需要将 A 和 B 相乘以获得新的 ndarray:

另一种思考方式是,向量 B 的每一行沿 A 的轴 =-2 相乘,得到一个新的 1,32,512,640 立方体。B 的每一行可以循环形成 1,32,512,640 个立方体,然后可以使用np.concatenateor来构建 C np.vstack,例如:

但是我想知道是否可以使用类似的东西np.einsumnp.tensordot将其全部矢量化在一行中。我还在学习如何使用这两种方法,所以我不确定这里是否合适。

谢谢!

0 投票
1 回答
128 浏览

python - 矩阵向量运算的 Python 向量化

我有一个形状为 (2,2,N) 的矩阵 A 和一个形状为 (2,N) 的矩阵 V

我想对以下内容进行矢量化:

任何方式都可以使用 tensordot 或任何其他 numpy 函数来完成,而无需显式循环?

0 投票
1 回答
188 浏览

python - 这个 4D einsum 操作的张量点是什么?

这是一个简单的代码,可以将 4D 矩阵 a 乘以 3D 矩阵 b 进行“批量相乘”:

对于时间:

我想测试一下 tensordot 的性能以查看它的比较情况,但我真的很难在这里了解如何使用它。如果有人足够熟悉来指导我,将不胜感激。谢谢!

我最初的想法是:

但这给了我一个 MemoryError 所以我认为这是不对的......

0 投票
1 回答
162 浏览

python - 张量操作python中的内存和时间

目标 我的目标是计算您可以在下面看到的公式给出的张量。指数 i、j、k、l 从 0 到 40,p、m、x 从 0 到 80。

张量的公式

Tensordot 方法这个总和只是收缩了巨大张量的 6 个指数。我试图通过允许这种计算的张量点来做到这一点,但是我的问题是内存,即使我先做一个张量点,然后再做另一个。(我在 colab 工作,所以我有 12GB RAM 可用)

嵌套循环方法但是有一些额外的对称性控制 B 矩阵,即 B{ijpx} 的唯一非零元素使得 i+j= p+x。因此,我能够将 p 和 m 写为 x (p=i+jx, m=k+lx) 的函数,然后我做了 5 个循环,即为 i,j,k,l,x 但另一方面时间是问题,因为计算需要 136 秒,我想重复很多次。

嵌套循环方法中的时序目标将时间减少 10 倍是令人满意的,但如果可以将其减少 100 倍,那就绰绰有余了。

您对解决内存问题或减少时间有什么想法吗?您如何处理带有附加约束的此类求和?

(备注:矩阵 A 是对称的,到目前为止我还没有使用过这个事实。没有更多的对称性。)

这是嵌套循环的代码:

张量点方法的代码:

0 投票
1 回答
962 浏览

python - numpy中向量的Tensordot

我目前正在尝试使用 numpy 为向量创建一个张量点。例如,假设我有以下变量:

我想计算“向量的张量积”,即 [a[0]*b[0], a[0]*b[1], a[1]*b[0], a[1] *b[1]] 这将在我们的示例中给出:

我已经尝试了许多沿不同轴使用 tensordot 的组合,但它从来没有给我想要的结果:((

例如,我尝试了以下操作:

这给了我array(70)

或者np.tensordot(a,b, axes = 0) 这给了我

我还尝试使用不同的轴,例如np.tensordot(a,b, axes = ([0], [1]))没有成功...

有人可以帮帮我吗?:) 我确定这很微不足道,但我似乎错过了一些东西

谢谢。

0 投票
1 回答
32 浏览

python - Tensorflow:Tensordot 可重现的结果

tf.tensordot在 Tensorflow 中玩耍。但是,我遇到了一些困扰我的不一致之处。下面是一个可重现的例子:

这将返回一个具有维度的张量(150, 196, 22)

这将返回一个具有维度的张量(1, 196, 22)

现在,如果我们测试第一个元素 fromoutput_150是否几乎等于第一个也是唯一一个元素 from output_1,结果是两个数组之间不匹配。

另一方面,如果我们这样做:

我们看到输入完全相同。话虽如此,我希望 的输出tf.tensordot也相同,但事实并非如此。


同样,这是使用and的tf.tensordot等价物:tf.reshapetf.matmul

结果完全相同,输出数组之间不匹配。这个怎么可能?

0 投票
2 回答
2230 浏览

python - 用numpy批量点积?

我需要用一个向量得到许多向量的点积。示例代码:

我想得到b反对的每一行的点积a。我可以迭代:

这使:

[5, 17, 2, 0]

我怎样才能在不迭代的情况下得到这个?谢谢!

0 投票
3 回答
1270 浏览

python - 两个 3D 张量之间的点积

我有两个 3D 张量,张量A有 shape[B,N,S]和张量B也有 shape [B,N,S]。我想要得到的是第三个张量C,我希望它有[B,B,N]形状,其中元素C[i,j,k] = np.dot(A[i,k,:], B[j,k,:]. 我也想实现这是一种矢量化的方式。

一些进一步的信息:这两个张量AB有 shape [Batch_size, Num_vectors, Vector_size]。张量C, 应该表示批次 from 中的A每个元素与批次 from 中的每个元素之间的点积B,以及所有不同向量之间的点积。

希望它足够清楚,期待您的回答!

0 投票
1 回答
97 浏览

pytorch - 如何使用单个循环计算 pytorch 中两组特征之间的乘积?

我想计算两组特征矩阵X和每组Y 维度之间的乘积(H,W,12)

我会低效地做:

这将输出H维度(H,W,144)

如何在不迭代两个循环的情况下在 pytorch 中完成?

我尝试过使用 tensordot 解决方案,但无法复制该行为。

0 投票
1 回答
73 浏览

tensorflow - 从 2D 张量中的每个向量对 3D 张量中的每个 2D 矩阵进行操作

我有一个二维张量。我想将该 2D 张量中的每个向量和tf.tensordot(vector, matrix, axes=1)3D 张量中的矩阵获取,该矩阵在 3D 张量中与向量在 2D 张量中具有相同的索引。

本质上,我希望得到与这个 for 循环相同的结果,但是通过执行 tensorflow 矩阵运算而不是 numpy 和循环:

它的输出应该是一个看起来像这样的矩阵(尽管类型会有所不同):

[array([6., 6., 9.], dtype=float32), array([3., 4., 6.], dtype=float32)]