问题标签 [numpy-einsum]

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 回答
584 浏览

python - 为什么 `numpy.einsum` 使用 `float32` 比 `float16` 或 `uint16` 工作得更快?

在我使用 numpy 1.12.0 的基准测试中,计算点积float32 ndarrays比其他数据类型快得多:

我试过 profiling einsum,但它只是将所有计算委托给 C 函数,所以我不知道这种性能差异的主要原因是什么。

0 投票
2 回答
178 浏览

python - 生成 np.einsum 评估图

我打算教np.einsum给同事们,希望展示如何将其简化为乘法和求和。所以,我想用字母字符代替数字数据。在数组中。

假设我们有 A (2X2) 作为 [['a', 'b'], ['c', 'd']] 和 B (2X1) 作为 [['e'], ['f']] 我们可以使用 einsum 创建一个矩阵 C,比如:np.einsum('ab , bc -> ac', A, B).

我想看到的是:它返回计算图:类似于:a*c + ...等。

当然,np.einsum需要数值数据,如果给定上述代码运行会出错。

0 投票
1 回答
157 浏览

python - 使用 np.einsum 进行光线投射的矢量化范围

我有一个 D 维点和向量,分别是 p 和 v,一个正数 n 和一个分辨率。

我想在连续将向量 v*resolution 添加到点 pn/分辨率时间后获得所有点。

例子

我目前的方法是平铺由n和分辨率给出的范围,由维度D,乘以v并添加p。

是否有使用 np.einsum 或其他方法计算 DRange 的直接方法?

0 投票
1 回答
940 浏览

python - 如何在具有不规则数组形状的 numpy 中矢量化/张量操作

我想执行操作

表格1

如果表格2 有一个规则的形状,那么我可以使用 np.einsum,我相信语法是

不幸的是,我的数据 X 在第一个(如果我们零索引)轴上有一个非常规结构。

为了给出更多的上下文,表格3指的是第 i 个组的第 j 个成员的第 p 个特征。因为组有不同的大小,实际上,它是一个不同长度的列表,相同长度的列表。

表格4具有规则结构,因此可以保存为标准 numpy 数组(它是一维的,然后我使用 alpha.reshape(a,b,c) 其中 a,b,c 是特定于问题的整数)

我想避免将 X 存储为列表列表或不同维度的 np.arrays 列表并编写类似

这是用于执行此操作的一些不错的 numpy 函数/数据结构,还是我将不得不与一些仅部分矢量化的实现妥协?

0 投票
1 回答
871 浏览

arrays - 张量的 numpy 点积(3d 乘以 2d)

目前我使用

我想计算:

r_ik = sum_j(A_ijk * b_jk)

换句话说:A 是“4 个矩阵的堆栈”(形状为 (3,2)),即 3d 数组,b 是“4 个向量的堆栈”(形状为 (3,)),即 2d 数组。期望的结果是“4 个矩阵向量积的堆栈”,即向量堆栈,即再次是二维数组(形状为 (3, 4))。

我对 np.einsum 和 np.tensordot 进行了中等深度的研究,但我用它们构建的任何解决方案至少与我的循环解决方案一样长且可读性差。

但是我认为应该有一个简单的问题来解决这个问题。

0 投票
1 回答
2216 浏览

python - 没有scipy的numpy中的批量卷积2d?

我有一批存储在数组中的b m x n图像,以及我想应用于批处理中的每个图像(然后使用总和池并存储在数组中)的大小x卷积滤波器,即是真的。fp x qyall(np.allclose(y[i][j][k], (x[i, j:j+p, k:k+q] * f).sum()) for i in range(b) for j in range(m-p+1) for k in range(n-q+1))

调整这个答案,我可以写以下内容:

但我认为有一种方法可以只用一个einsum,这对我很有用,因为b通常在 100 到 1000 之间。

如何调整我的方法以仅使用一种方法einsum?另外,出于我的目的,我不能引入scipynumpy.

0 投票
0 回答
1238 浏览

python - 输入图像的纯 NumPy 2D 均值卷积导数

我有b2dm x n灰度图像,我正在使用p x q过滤器进行卷积,然后进行均值池化。使用纯 numpy,我想计算输入图像和过滤器的导数,但我在计算输入图像的导数时遇到了麻烦:

我知道损失 wrt 的导数w[b,r,s,p,q]1/(p*q) * f[p,q] * dy[b,r,s]. 但是,我不想显式计算导数w并将它们存储在内存中,因为该数组会很大。

我以为我可以对 , 的视图进行 einsum dxvdx类似于窗口化wdx,并希望 einsum 会增加vdx[b,r,s,p,q] += f[p,q] * dy[b,r,s],但它实际上分配了vdx[b,r,s,p,q] = f[p,q] * dy[b,r,s]。如果有办法out_add_to在 einsum 中指定,那么我的问题就解决了。

如何在纯 NumPy 中dx不存储大b x r x s x p x q矩阵的情况下进行计算?我不能使用 scipy 或任何其他依赖项来解决这个问题。

0 投票
1 回答
581 浏览

python - np.einsum 中的速度差异

我注意到np.einsum当它减少一维时会更快

这对我来说似乎很奇怪,因为我希望它首先生成新数组然后对其求和,这显然不会发生。那里发生了什么?为什么一个维度下降一个维度会变快,而另一个维度下降一个维度就不会变快?

旁注:我首先认为它与创建一个大数组有关,当它有很多维度时,我认为不是这样:

因为创建新数组要快得多。

0 投票
3 回答
860 浏览

numpy - 子数组的numpy点积?

我有两个像

而他们的点积可以很容易地用 来完成np.dot(n1, n2),这给出了 30 作为正确答案。如果我需要在 n1 和 n2 的两个子数组上操作点怎么办,例如

给出 [5, 25]。我可以通过手动拆分数组和 for 循环来做到这一点。但是想知道是否有更 Pythonic 和 numpy 的方式来做到这一点?

0 投票
2 回答
45 浏览

python - 在两个数组的最终轴上逐元素相乘

给定一个 3d 数组和一个 2d 数组,

如何在每个轴的最后一个轴上运行元素乘法,导致形状在c哪里?IEc.shapea