问题标签 [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.
python - 为什么 `numpy.einsum` 使用 `float32` 比 `float16` 或 `uint16` 工作得更快?
在我使用 numpy 1.12.0 的基准测试中,计算点积float32
ndarrays
比其他数据类型快得多:
我试过 profiling einsum
,但它只是将所有计算委托给 C 函数,所以我不知道这种性能差异的主要原因是什么。
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
需要数值数据,如果给定上述代码运行会出错。
python - 使用 np.einsum 进行光线投射的矢量化范围
我有一个 D 维点和向量,分别是 p 和 v,一个正数 n 和一个分辨率。
我想在连续将向量 v*resolution 添加到点 pn/分辨率时间后获得所有点。
例子
我目前的方法是平铺由n和分辨率给出的范围,由维度D,乘以v并添加p。
是否有使用 np.einsum 或其他方法计算 DRange 的直接方法?
python - 如何在具有不规则数组形状的 numpy 中矢量化/张量操作
我想执行操作
如果 有一个规则的形状,那么我可以使用 np.einsum,我相信语法是
不幸的是,我的数据 X 在第一个(如果我们零索引)轴上有一个非常规结构。
为了给出更多的上下文,指的是第 i 个组的第 j 个成员的第 p 个特征。因为组有不同的大小,实际上,它是一个不同长度的列表,相同长度的列表。
具有规则结构,因此可以保存为标准 numpy 数组(它是一维的,然后我使用 alpha.reshape(a,b,c) 其中 a,b,c 是特定于问题的整数)
我想避免将 X 存储为列表列表或不同维度的 np.arrays 列表并编写类似
这是用于执行此操作的一些不错的 numpy 函数/数据结构,还是我将不得不与一些仅部分矢量化的实现妥协?
python - 没有scipy的numpy中的批量卷积2d?
我有一批存储在数组中的b
m x n
图像,以及我想应用于批处理中的每个图像(然后使用总和池并存储在数组中)的大小x
卷积滤波器,即是真的。f
p x q
y
all(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
?另外,出于我的目的,我不能引入scipy
除numpy
.
python - 输入图像的纯 NumPy 2D 均值卷积导数
我有b
2dm 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 dx
,vdx
类似于窗口化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 或任何其他依赖项来解决这个问题。
python - np.einsum 中的速度差异
我注意到np.einsum
当它减少一维时会更快
这对我来说似乎很奇怪,因为我希望它首先生成新数组然后对其求和,这显然不会发生。那里发生了什么?为什么一个维度下降一个维度会变快,而另一个维度下降一个维度就不会变快?
旁注:我首先认为它与创建一个大数组有关,当它有很多维度时,我认为不是这样:
因为创建新数组要快得多。
numpy - 子数组的numpy点积?
我有两个像
而他们的点积可以很容易地用 来完成np.dot(n1, n2)
,这给出了 30 作为正确答案。如果我需要在 n1 和 n2 的两个子数组上操作点怎么办,例如
给出 [5, 25]。我可以通过手动拆分数组和 for 循环来做到这一点。但是想知道是否有更 Pythonic 和 numpy 的方式来做到这一点?
python - 在两个数组的最终轴上逐元素相乘
给定一个 3d 数组和一个 2d 数组,
如何在每个轴的最后一个轴上运行元素乘法,导致形状在c
哪里?IEc
.shape
a