问题标签 [numexpr]
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 - 在 numexpr 中限制子表达式
我如何有效地表达以下使用numexpr
?
这里是一些相同形状的大型 NumPy 数组x
。y
换句话说,我试图x-y
在1.0
除以之前限制x+y
。
我想使用单个numexpr
表达式来做到这一点(x
并且y
很大,我不想多次迭代它们)。
python - numexpr 中的自动 float32 提升
考虑以下 dtype 的 NumPy 数组float32
:
当我将它乘以2
usingpytables.Expr
时,我得到一个float32
数组:
然而,当我将它乘以 时2.0
,我得到一个float64
数组:
有没有办法以不会导致结果提升为的方式在上述表达式中指定浮点文字float64
?
更一般地说,我有一个使用数组的表达式float32
,并且我想确保结果也是类型float32
(我不介意float64
用于中间计算,但我不能将结果存储为float64
)。我该怎么做呢?
python - 并行化 Numpy 向量操作
例如,让我们使用numpy.sin()
以下代码将返回数组每个值的正弦值a
:
但是我的机器有32个核心,所以我想利用它们。(这样的开销可能不值得,numpy.sin()
但我实际想要使用的功能要复杂得多,而且我将处理大量数据。)
这是最好的(阅读:最聪明或最快的)方法:
还是有更好的方法来做到这一点?
java - PyTables 和 numexpr 的 Scala 或 Java 类似物
我正在寻找 numexpr 和 PyTables 的 Scala 或 Java 类似物(尤其是 tables.Expr)。这适用于需要对内存不足的数据执行矩阵运算的多核机器上的多核分析系统。特别是这些库应该优化磁盘、内存、缓存和 CPU 之间的数据移动。应该有效地处理稀疏矩阵。有关图书馆应解决哪些问题的更多背景信息,请参阅http://www.youtube.com/watch?v=J3-oN_TulTg和https://www.google.com/search?q=alted 的热门搜索+cpu+饥饿。
虽然这个问题表面上与Scala 等同于 pyTables? 该问题没有指定 pytables 的哪些方面很重要,并且那里的答案不适合我的问题。
处理缓存感知和缓存遗忘算法的 OTOH 库可能会有所帮助。
我想“Scala Virtualized”(又名语言虚拟化)和 Stanford-PPL Delite 框架可以作为在 Scala 中构建我所需要的东西的良好基础,如果我正在寻找的东西还不存在的话。
Hadoop、MapReduce、图形数据库和大多数流行的 nosql 存储都不是我想要的。虽然我正在寻找的是技术上的一种 nosql 存储。
python - Numexpr 错误:“a = global_dict[name]”
我正在尝试使用 Numexpr 制作一个快速的Vector Norm函数来与Numpy's进行比较。我尝试以下方法:
我明白了:
我基本上遵循了他们用户指南中的相同步骤(这似乎是唯一的参考)。我唯一的线索是:
umexpr 的主要程序是这样的:
evaluate(ex, local_dict=None, global_dict=None, **kwargs)
其中 ex 是形成表达式的字符串,例如“2*a+3*b”。a 和 b 的值默认取自调用函数的框架(通过使用 sys._getframe())。或者,它们可以使用 local_dict 或 global_dict 参数指定,或作为关键字参数传递
......我不太明白 - 我认为作者保持简单,因为包很简单。我忽略了什么?
python - 用python对分布式内存集群进行“全局数组”并行编程
我正在寻找一个 python 库,它将 numpy 的功能扩展到分布式内存集群上的操作:即“一种并行编程模型,其中程序员将数组视为单个全局数组,而不是位于不同处理器上的多个独立数组。 "
对于 Matlab,麻省理工学院的林肯实验室创建了pMatlab,它允许在集群上进行矩阵代数,而不必过多担心并行编程方面的细节。(以上引用的出处。)
对于基于磁盘的存储,python 存在 pyTables。尽管它没有优化计算在集群中的分布方式,而是优化了计算在磁盘上的大数据如何“分布”。- 这相当相似,但仍然缺少一个关键方面。
目的不是从集群中榨取最后一点性能,而是进行对于单台机器来说太大的科学计算(半交互式)。
python是否存在类似的东西?我的愿望清单是:
- 积极维护
- 代替numpy
- 或者类似于numexpr的用法
- 并行编程部分的高度抽象:即不需要用户显式使用 MPI
- 支持分布式内存集群中的数据局部性
- 支持集群中的多核机器
这可能有点像相信牙仙,但你永远不知道......
到目前为止我发现:
太平洋西北国家实验室(存在/曾经存在)为 Global Array 提供了一个 python 接口。请参阅“使用 NumPy 和全局数组工具包在 Python 中进行高性能并行计算”主题下的链接。(特别是“GA_SciPy2011_Tutorial.pdf”。)但是这似乎又消失了。
DistNumPy :在本文中有更详细的描述。然而,这些项目似乎已被放弃。
如果您知道任何软件包或使用过以上两种中的任何一种,请描述您对它们的体验。
python - Numexpr:如何使用“local_dict”和“global_dict”?
我一直在尝试并尝试学习Numexpr包。关于如何使用它的例子充其量是稀疏的。有人可以给我一个关于如何使用“local_dict”和“global_dict”参数的简单例子吗?
python - 如何使用 numpy a la numexpr 进行就地极坐标变换
Numexpr 是一个 python 模块,它允许 jitting 一些表达式来处理 numpy 数组。现在,如果它允许我这样做会很酷:
我可以重新使用计算的值cita
来计算nx
和ny
。另外,因为我必须检索一次 x 和 y 并且它们在内存中一个接一个,所以我也会减少缓存未命中;和 的书写也是nx
如此ny
。但是,据我了解,就目前而言,这种代码不可能使用 Numexpr。
所以,我的问题:
python + numpy 是否有更高级的东西可以做到这一点?(numexpr的一些超集)
或者,我错了,这可以简单地用 numpy 和 numexpr 来完成?
注意 1:我知道我可以在 C/C++/其他语言中以多种方式实现这个小功能,或者我可能不太关心性能,并且可以使用或不使用 numexpr 进行涉及 numpy 的 hack。
注意 2:我知道weave,但我把它放在“不酷、不维护的解决方案,这些解决方案会涉及弄乱 C”中。
python - numexpr.evaluate("a+b",out=a)
在 python numexpr 中将值分配给您正在操作的同一数组以避免创建临时数组是否安全?
从项目主页上对内存使用情况的描述来看,它看起来还不错,但如果不深入研究源代码,这几乎不是一个可靠的答案。
我尝试了以下工作正常,但我希望得到更熟悉这个包的人的确认: