问题标签 [numpy-ufunc]

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

python - 给定两个类似数组的操作数(而不是尝试广播它们),如何使 ufunc 输出矩阵?

我想从 a 中得到一个给定两个值的矩阵ndarrayufunc例如:

上面的代码不起作用(它给出了 aValueError因为它尝试广播两个数组并且由于它们具有不同的形状而失败:(5,)和(3,));我想获得一个值矩阵,其中行对应于度数,列对应于多项式被评估的点(反之亦然,没关系)。

目前我的解决方法是简单地使用for-loop:

有没有办法做到这一点?一般来说,如果您有类似 array_like 的参数,您如何让ufunc用户知道您想要一个-n维数组?n

我知道numpy.vectorize,但这似乎既不比简单的循环更快也不优雅for(而且我什至不确定你是否可以将它应用于现有的ufunc)。

更新ufunc接收 3 个或更多参数的 's 呢?尝试outer方法给出了一个ValueError: outer product only supported for binary functions. 例如,scipy.special.eval_jacobi

0 投票
2 回答
269 浏览

python - 在 numpy 中广播对 3D 数组的操作的时间缩放

我正在尝试在两个 3D 数组上广播“>”的简单操作。一个具有尺寸 (m, 1, n),另一个具有尺寸 (1, m, n)。如果我更改第三维 (n) 的值,我会天真地期望计算速度会缩放为 n。

但是,当我尝试明确测量这一点时,我发现当 n 从 1 增加到 2 时,计算时间增加了大约 10 倍,之后缩放是线性的。

为什么从 n=1 到 n=2 时计算时间会急剧增加?我假设它是 numpy 中的内存管理工件,但我正在寻找更多细节。

代码附在下面的结果图中。

广播操作的时间图

在此处输入图像描述

0 投票
1 回答
105 浏览

python - 如何在不使用 for 循环的情况下将矢量化函数映射到 numpy 数组?

所以这就是我已经拥有的:

这是我想做的事情:

但是,当我运行上述代码块时,出现以下错误:

根据我对广播如何工作的理解numpy,这应该有效。我可以只使用一个for循环,但随着样本数量的增加,它会变得非常慢。

停止

0 投票
1 回答
198 浏览

python - TypeError: ufunc 'add' 不包含签名匹配类型 dtype('

我正在从目录中读取图像,当我遍历文件名时,我得到了标题中提到的错误。变量“imagePath”是我本地机器中图像的路径。当 'np.fromfile(imagePath)' 被删除时,代码运行,它甚至会打印图像的路径,但是当我尝试用 numpy 读取它们时会爆炸。


TypeError Traceback(最近一次调用最后一次)

TypeError: ufunc 'add' 不包含签名匹配类型 dtype('


您正在使用变量images来存储:

  1. 文件名列表
  2. 图像列表

结果,你最终会做

"/" + "file1.png"
"/" + "your-gravatar.jpg"
"/" +

在最后一种情况下,它显然失败了。

尝试选择两个不同的变量名称。

0 投票
1 回答
200 浏览

python - 在最后一个轴上将外部减法与元素减法相结合?

考虑上面的代码。我有一个形状数组A(4,4,4,16,3),它表示格子中的 3D 位置向量(dim 3 的最后一个轴是 x、y、z 坐标)。前 4 个维度索引点阵中的站点。

我想要的是

我想从 中生成A一个数组,该数组包含晶格中站点之间所有可能的分离向量。B这意味着一个形状为 的输出数组(4,4,4,16,4,4,4,16,3)。前 4 个维度是站点 i,接下来是站点 j 的 4 个维度,然后是位置向量差的 (x,y,z) 坐标的最后一个维度。

A[a,b,c,d]:形状(3,)是第一个站点的(x,y,z);A[r,s,t,u]:形状(3,)是第二个站点的(x,y,z);然后我想B[a,b,c,d,r,s,t,u]成为前两者之间的 (x,y,z) 差异。

我的尝试

我知道该ufunc.outer功能,正如您在我的代码尝试中看到的那样。但我坚持将它与在每个A.

在我的尝试中,B具有我想要的正确尺寸,但这显然是错误的。有什么提示吗?(除非使用任何 for 循环)

0 投票
2 回答
167980 浏览

python - Numpy,将数组与标量相乘

是否可以使用 ufuncs https://docs.scipy.org/doc/numpy/reference/ufuncs.html
为了将函数映射到数组(一维和/或二维)和标量
如果不是我的实现方式这个?
例如:

预期结果:

如果它与问题相关,我正在使用 python 2.7。

0 投票
1 回答
482 浏览

python - ufunc与Numpy中的基本算术运算符

我看到 Universal Function(ufunc) 用于执行元素数组操作。

这段代码类似于arr + arr2. 在那种情况下,我们为什么要使用 ufunc?

0 投票
2 回答
820 浏览

python - 如何使用 numpy 沿轴制作 Hadamard 产品?

我正在尝试使用 2-D 阵列制作 3-D 的 Hadamard 产品。2-D 数组共享 3-D 数组的前两个轴的形状,应该沿着 2 轴(因此,第 3 轴)移动以进行乘法运算,这意味着:用切片 0 制作 Hadamard 积,然后切片 1,等等(参见图像,示意图)。

原始的 3-D 数组是一个opencv图像,因此具有 fe 的形状(1080, 1920, 3)。二维阵列是该图像的一个切片,因此其形状为(1080, 1920)

有没有办法在没有循环或自己指定每个切片的情况下做到这一点?或者是循环到这里的方式吗?

有效的是:

但是,我不希望在代码中进行两次计算。

我试过了:

虽然这在使用二维和一维数组时有效

它在 3-D/2-D 情况下给出了广播错误:

同样适用于np.apply_along_axis

产生以下结果:

但我想这行不通,因为它是为一维函数设计的......

所需的数组乘法

0 投票
1 回答
149 浏览

python-3.x - 评估数组值函数python 3

我需要集成一个矩阵函数,如下例所示:

执行此操作的非有效方法是使用三个 for 循环。虽然,我想让它更有效率。我考虑过使用“地图”,例如:

a1, a2,a3w是相同大小的数组(a 是样本点,w 是权重)

这是最优化的方式吗?

0 投票
1 回答
280 浏览

python - TypeError: ufunc 'add' 不包含签名匹配类型 dtype('

我需要打印一些p 使用print这个循环的值。

如果我尝试p在循环 fow 示例之外打印

它可以工作,但是当我p[i]在 for 循环中放入 print 时,我遇到了类型问题。我该如何解决?


通过为某些对象属性分配值来过滤唯一值要快得多 - 不会有重复项。对于初始数组的每个 +1 成员,这种方法会变得越来越好,因为循环会导致快速算法复杂化