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

numpy - 测试 Numpy 操作

每当我需要测试一个中等复杂的 numpy 表达式时,比如说,

我最终会做一些黑客行为,例如设置ab因此

这样我就可以跟踪d包含的内容。

这很难看,也不是很方便。理想情况下,我将能够执行以下操作:

因此,例如,d[0, 1, 2]可以看到对应于 'hB',它比 .7 更清晰(这是其他赋值ab会给出的)。这是无法完成的,因为 ufuncadd不接受字符。

总之,一旦我开始链接一些转换(外部产品、einsum、广播或切片等),我就会迷失方向,需要亲自看看我的转换实际上在做什么。那是我需要运行一些示例的时候,这就是我目前这样做的方法让我觉得次优的地方。是否有任何标准或更好的方法来做到这一点?

0 投票
1 回答
741 浏览

numpy - 使用自定义函数迭代和累积一个 numpy 数组

7 年多来一直存在一些相关问题,但我再次提出这个问题,因为我看不到提供了“numpy”方式的迭代方法。

任务如下:如果我有一个 numpy 数组 'arr' 并有一个自定义函数'fn',我怎么能在 'arr' 上迭代地应用 'fn'?'fn' 不能由 ufunc 工具构造。

下面是我想出的玩具代码:

r_list 是每次的 r 数组。R_list 是折扣 r 的累积和。假设 r_list 和 R_list 预先恢复。上面的循环执行 R[t] : r[t] + gamma * R[t-1]

我不认为这是利用 numpy 的最佳方式......如果可以利用 tensorflow,那么 tf.scan() 的工作如下:

在此先感谢您的帮助!

0 投票
1 回答
171 浏览

python - Numpy:关于 numpy.ufunc.reduceat 的第二条规则?

文档 - v1.14第二条规则是

  • 如果 indices[i] >= indices[i + 1],第 i 个广义“行”就是 a[indices[i]]。

那么这将如何使用呢?有没有真实的例子?

我的意思是,必须(?)有一些真实的情况符合这条规则正在做的事情,然后我们定义了符合它们的规则,那么那种情况是什么?

0 投票
1 回答
44 浏览

python - 算术表达式中的 ufunc 内存消耗

算术numpy表达式的内存消耗是多少?

(vec 是一个 numpy.ndarray)。是否为每个中间操作存储了一个数组?这种复合表达式的内存是否是底层 ndarray 的数倍?

0 投票
1 回答
413 浏览

python - 直接应用和使用 xarray.apply_ufunc 应用的 numpy 梯度结果之间的差异

我正在尝试使用 xarrayapply_ufunc来包装 numpy 的gradient函数,以便沿一维获取渐变。但是,apply_ufunc返回的数组与np.gradient直接使用返回的数组形状不同:

我希望预期和实际相同,但它们却不同:

expected并且actual也不仅仅是彼此的转置版本。)我很困惑为什么 - 我的理解apply_ufunc是核心尺寸被移到最后,所以axis=-1应该总是提供给 ufunc?

0 投票
1 回答
285 浏览

python - Numpy:通过分箱从关联中查找最小值和最大值

先决条件

这是来自这篇文章的一个问题。所以,一些问题的介绍会和那个帖子差不多。

问题

假设result是一个二维数组并且values是一个一维数组。values保存与 中的每个元素相关联的一些值resultvaluesto中的元素的映射result存储在x_mappingand中y_mapping。一个位置result可以与不同的值相关联。现在,我必须找到按关联分组的值的最小值和最大值。

一个更好的说明的例子。

min_result大批:

max_result大批:

values大批:

注意:这里的result数组和values具有相同数量的元素。但情况可能并非如此。大小之间根本没有关系。

x_mapping并具有从 1D到 2Dy_mapping的映射(最小值和最大值)。和的大小相同。valuesresultx_mappingy_mappingvalues

x_mapping-[0, 1, 0, 0, 0, 0, 0, 0]

y_mapping-[0, 3, 2, 2, 0, 3, 2, 1]

这里,第 1 个值(values[0])和第 5 个值(values[4])的 x 为 0,y 为 0(x_mapping[0]y_mappping[0]),因此与 相关联result[0, 0]。如果我们计算该组的最小值和最大值,我们将分别得到 1 和 5 作为结果。因此,min_result[0, 0]将有 1 个和max_result[0, 0]5 个。

请注意,如果根本没有关联,则默认值为result0。

当前工作解决方案

min_result,

max_result,

失败的解决方案

#1

#2

#3

问题

如何使用np.minimum.reduceatnp.maximum.reduceat解决这个问题?我正在寻找针对运行时优化的解决方案。

边注

我正在使用 Numpy 版本 1.14.3 和 Python 3.5.2

0 投票
1 回答
429 浏览

python - What's the difference between dask=parallelized and dask=allowed in xarray's apply_ufunc?

In the xarray documentation for the function apply_ufunc it says:

and in the documentation's page on Parallel Computing then there is a note:

For the majority of NumPy functions that are already wrapped by dask, it’s usually a better idea to use the pre-existing dask.array function, by using either a pre-existing xarray methods or apply_ufunc() with dask='allowed'. Dask can often have a more efficient implementation that makes use of the specialized structure of a problem, unlike the generic speedups offered by dask='parallelized'.

However, I'm still not clear as to what the difference between these two options is. Does allowed still operate on chunks one by one to lower memory usage? Will allowed still parallelize if the applied ufunc only uses dask operations? Why does parallelized require you to give more information about the ufunc outputs (i.e. the arguments output_dtypes, output_sizes) than allowed does?

0 投票
1 回答
111 浏览

python - numpy 中的通用函数概念和符号

我正在学习 numpy 包,我发现了这个代码示例:

我无法理解的是点符号:

相比之下,例如

我了解 add 和 reduce 的作用,但 add 是什么?什么是减少?

0 投票
1 回答
174 浏览

python - 如何将最后一个索引明确指定给 np.ufunc.reduceat

说我有一个数组

我想找到整个数组和后半部分的总和np.add.reduceat1

如果我这样做:

我立即得到一个错误

如果我这样做

我得到了错误的答案(10 应该是 15):

我能想出的唯一解决方案是屏蔽需要最后一个索引的位置,从中减去 1,然后将最后一个元素添加回那里:

然后result[::2]给出想要的答案。对于我期望成为优雅的单线(并且比这更快)的东西,这看起来像是一个巨大的组合。


1完全意识到有更好的方法来做到这一点。这只是为了说明的目的而设计的示例。这个问题的真正问题源于尝试解决numpy: fast regular-spaced average for large numbers of line segments/points

0 投票
4 回答
116796 浏览

python - TypeError: 输入类型不支持 ufunc 'isnan',输入无法安全强制

我正在尝试将 csv 转换为 numpy 数组。在 numpy 数组中,我用 NaN 替换了几个元素。然后,我想在 numpy 数组中找到 NaN 元素的索引。代码是:

当我执行此操作时,我收到警告和错误。警告是:

错误是:

这是我正在使用的数据集的一部分:

我无法纠正错误。如何克服第 26​​ 行的警告?如何解决错误?请帮忙!提前致谢!

更新:当我以不同的方式尝试相同的事情(例如从文件中读取数据集而不是转换为数据框)时,我没有收到错误消息。那会是什么原因呢?代码是:

第一个代码有什么问题,为什么第二个代码甚至没有发出警告?请帮忙!