问题标签 [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.
python - 将这两个向量相乘的大多数 Pythonic 方法?
我有两个形状的ndarray:
我需要将 A 和 B 相乘以获得新的 ndarray:
另一种思考方式是,向量 B 的每一行沿 A 的轴 =-2 相乘,得到一个新的 1,32,512,640 立方体。B 的每一行可以循环形成 1,32,512,640 个立方体,然后可以使用np.concatenate
or来构建 C np.vstack
,例如:
但是我想知道是否可以使用类似的东西np.einsum
或np.tensordot
将其全部矢量化在一行中。我还在学习如何使用这两种方法,所以我不确定这里是否合适。
谢谢!
python - 矩阵向量运算的 Python 向量化
我有一个形状为 (2,2,N) 的矩阵 A 和一个形状为 (2,N) 的矩阵 V
我想对以下内容进行矢量化:
任何方式都可以使用 tensordot 或任何其他 numpy 函数来完成,而无需显式循环?
python - 这个 4D einsum 操作的张量点是什么?
这是一个简单的代码,可以将 4D 矩阵 a 乘以 3D 矩阵 b 进行“批量相乘”:
对于时间:
我想测试一下 tensordot 的性能以查看它的比较情况,但我真的很难在这里了解如何使用它。如果有人足够熟悉来指导我,将不胜感激。谢谢!
我最初的想法是:
但这给了我一个 MemoryError 所以我认为这是不对的......
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 是对称的,到目前为止我还没有使用过这个事实。没有更多的对称性。)
这是嵌套循环的代码:
张量点方法的代码:
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]))
没有成功...
有人可以帮帮我吗?:) 我确定这很微不足道,但我似乎错过了一些东西
谢谢。
python - Tensorflow:Tensordot 可重现的结果
我tf.tensordot
在 Tensorflow 中玩耍。但是,我遇到了一些困扰我的不一致之处。下面是一个可重现的例子:
这将返回一个具有维度的张量(150, 196, 22)
这将返回一个具有维度的张量(1, 196, 22)
现在,如果我们测试第一个元素 fromoutput_150
是否几乎等于第一个也是唯一一个元素 from output_1
,结果是两个数组之间不匹配。
另一方面,如果我们这样做:
我们看到输入完全相同。话虽如此,我希望 的输出tf.tensordot
也相同,但事实并非如此。
同样,这是使用and的tf.tensordot
等价物:tf.reshape
tf.matmul
结果完全相同,输出数组之间不匹配。这个怎么可能?
python - 用numpy批量点积?
我需要用一个向量得到许多向量的点积。示例代码:
我想得到b
反对的每一行的点积a
。我可以迭代:
这使:
[5, 17, 2, 0]
我怎样才能在不迭代的情况下得到这个?谢谢!
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,:]
. 我也想实现这是一种矢量化的方式。
一些进一步的信息:这两个张量A
和B
有 shape [Batch_size, Num_vectors, Vector_size]
。张量C
, 应该表示批次 from 中的A
每个元素与批次 from 中的每个元素之间的点积B
,以及所有不同向量之间的点积。
希望它足够清楚,期待您的回答!
pytorch - 如何使用单个循环计算 pytorch 中两组特征之间的乘积?
我想计算两组特征矩阵X
和每组Y
维度之间的乘积(H,W,12)
:
我会低效地做:
这将输出H
维度(H,W,144)
如何在不迭代两个循环的情况下在 pytorch 中完成?
我尝试过使用 tensordot 解决方案,但无法复制该行为。
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)]