问题标签 [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 投票
2 回答
245 浏览

python - 执行大点/张量点积的最有效方法,同时只保留对角线条目

我试图找出一种方法来使用 numpy 以最省时的方式执行以下代数:

给定一个具有形状的 3D 矩阵/张量和一个具有A形状(n, m, p)的 2D 矩阵/张量,计算,其中生成的矩阵将具有维度 (n, m)。B(n, p)C_ij = sum_over_k (A_ijk * B_ik)C

我尝试了两种方法来做到这一点。一种是循环遍历第一个维度,每次计算一个正则点积。另一种方法是使用np.tensordot(A, B.T)shape 计算结果(n, m, n),然后沿第 1 维和第 3 维取对角线元素。两种方法如下所示。

第一种方法:

第二种方法:

但是,因为 n 是一个非常大的数字,所以第一种方法中的 n 循环会花费大量时间。第二种方法计算了太多不必要的条目来获得那个巨大的(n, m, n)矩阵,并且也花费了太多时间,我想知道是否有任何有效的方法可以做到这一点?

0 投票
1 回答
44 浏览

python - numpy-einsum 的张量点等价物

我试图找出tensordot以下表达式的等价物,因为 sparse 包不支持 einsum (原始问题的稀疏性比下面的示例要好得多)。

我卡住的地方是收缩ii->i,我不知道如何解释。

0 投票
1 回答
157 浏览

python - Python:用于多维数组的 numpy.dot / numpy.tensordot

我正在优化反向传播算法的实现以训练神经网络。我正在研究的一个方面是对一组数据点(输入/输出向量)执行矩阵运算,作为由 numpy 库优化的批处理,而不是循环遍历每个数据点。

在我原来的算法中,我做了以下事情:

然后我将所述矩阵扩展为张量,其中第一个形状索引将引用数据集。如果我有 3 个数据集(为简单起见),矩阵将如下所示:

仅使用 np.tensordot 或其他 numpy 操作,如何生成 C?

我假设答案看起来像这样:

(这是一个更复杂的应用程序的一部分,我构建事物的方式不再灵活。如果我找不到解决方案,我只会遍历数据集并为每个数据集执行乘法)

0 投票
1 回答
514 浏览

python - Fastest Way to Find the Dot Product of a Large Matrix of Vectors

I am looking for suggestions on the most efficient way to solve the following problem:

I have two arrays called A and B. They are both of shape NxNx3. They represent two 2D matrix of positions, where each position is a vector of x, y, and z coordinates.

I want to create a new array, called C, of shape NxN, where C[i, j] is the dot product of the vectors A[i, j] and B[i, j].

Here are the solutions I've come up with so far. The first uses the numpy's einsum function (which is beautifully described here). The second uses numpy's broadcasting rules along with its sum function.

Is there a faster way? I've heard murmurs that numpy's tensordot function can be blazing fast but I've always struggled to understand it. What about using numpy's dot, or inner functions?

For some context, the A and B arrays will typically have between 100 and 1000 elements.

Any guidance is much appreciated!

0 投票
2 回答
51 浏览

python - numpys张量点的向量化计算

我有两个分别包含形状(3,3)和形状张量的向量(3,3,3,3)。向量具有相同的长度,我正在计算这两个向量的逐元素张量点。例如,想要对以下计算进行矢量化以提高性能:

我考虑过使用numpy.einsum但无法找出正确的下标。我尝试了很多不同的方法,但到目前为止都失败了:

但这并不能重现我上面想要的迭代计算。如果使用 einsum 无法做到这一点,或者有更高效的方法可以做到这一点,我愿意接受任何类型的解决方案。

0 投票
0 回答
87 浏览

python - numpy einsum 的更快替代方案?

我有两个矩阵 - U 和 V,每个矩阵都有 n 个向量,如下所示:

(实际上 U 和 V 是 2d numpy 数组,向量 u1..un 和 v1...vn 是 1d)

我想创建一个 n 值的一维 numpy 数组:

(点 = 点积)

目前我用numpy的einsum做到这一点:

但是,我的矩阵很大,计算重复了很多次(使用不同的 U 和 V),所以我试图找到让它更快的方法。

我知道 np.einsum 可能有更快的替代方案,例如利用并行性的np.dotnp.tensordoteinsum2(而 np.einsum 是顺序的)。但我没有设法获得相同的功能 - 使用 np.dot 和 np.tensordot 输出是一个二维矩阵,其中包含比我需要的更多点积的结果。

我也开始研究NumExpr,但没有找到一种方法来以一种优雅的方式实现我所需要的,并且没有比所需更多的点积。

如果有人知道在我的用例中提高 einsum 性能的方法,我将不胜感激。

0 投票
1 回答
83 浏览

python - 2D数组和3D数组的乘法

我有 3D A 矩阵 3x3x5(第三维是 5)和 2D B 矩阵(3x3)。我想将 A 和 B 相乘以获得 (3x3x5) 矩阵。然后对生成的 3D 矩阵的元素求和以创建 2D 矩阵 (3x3)。我怎样才能做到这一点?

0 投票
2 回答
54 浏览

python - 高维中的numpy非规范点积

我正在尝试使用 NumPy 对循环进行矢量化,但我被卡住了我有一个A形状矩阵(NN,NN)我定义了 A-dot 乘积

然后我有两个矩阵BC(B有一个形状(N,NN)并且C有一个形状(K,NN)我要矢量化的循环是

我在研究过程中发现了np.tensordotor之类的函数np.einsum,但我并没有真正理解它们是如何工作的,并且(如果我很好理解的话)tensordot将计算规范的点积(A = np.eye(NN)在我的情况下对应)。

谢谢 !

0 投票
1 回答
144 浏览

c++ - 我将如何在 C++ 中编写 numpy.tensordot?

我正在尝试在 C++ 中复制 numpy.tensordot 。numpy 文档中的示例显示了一个嵌套循环,我可以开始工作,但是如果不是

我想要做:

这个新的嵌套循环在 python 中会是什么样子?在 C++ 中是否有更简单/更快的方法来执行此操作?现在我在 c++ 中使用与 std::vector 相同的嵌套“for”循环。我见过一些可能有帮助的库,但我试图只使用 c++ 标准库。

这是那个 numpy 示例,以及文档的链接:https ://numpy.org/doc/stable/reference/generated/numpy.tensordot.html

谢谢

0 投票
2 回答
443 浏览

pytorch - 将 tensordot 与 torch.sparse 张量一起使用

是否可以在 torch.sparse 张量中使用与“tensordot”类似的方法?

我正在尝试将 4 维张量应用于 2 维张量。这可以使用 torch 或 numpy 来实现。但是,在不使用“.to_dense()”使稀疏张量密集的情况下,我没有找到使用 torch.sparse 的方法。

更准确地说,这是我想要在不使用“.to_dense()”的情况下做的事情:

(这里是输出:torch_code

或者,这是使用 numpy 的类似代码:

(这里是输出:numpy_code

感谢您的帮助!