问题标签 [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 - 无法在 Windows 7 上安装 numexpr(以及因此 pytables),即使存在解释器.pyd,dll 加载也会失败
我使用 .whl 安装了 numexpr 和 pytable。安装看起来不错,但 dll 导入失败不断出现。以下是安装细节。
--- 在 pytable 中使用 numexpr 时 ---
python - 使用 numexpr 创建可调用对象
我正在使用 sympy 进行一些符号数学运算,然后使用eval
sympy 的lambdastr
实用程序生成 Python lambda 函数。这是我的意思的简化示例:
这行得通,但我不喜欢使用eval
,并且 sympy 不一定会生成计算效率高的代码。相反,我想使用numexpr
,这对于这个用例来说似乎很完美:
唯一的问题是我想生成一个可调用的(如func
lambda),而不是numexpr.evaluate
每次都调用。这可能吗?
python - 使用 numexpr 和 sqrt 进行 sympy lambdify
我正在尝试加快lambdify
使用numexpr
. 不幸的是,numexpr
基于 - 的函数在使用该函数时会中断sqrt
,即使它是受支持的函数之一。
这为我重现了这个问题:
当我运行它时,输出是:
作为健全性检查,我还尝试numexpr
直接调用:
它按预期工作,产生与 相同的结果func_numpy
。
编辑:当我使用这条线时它可以工作:
这是一个同情错误吗?
python - 当列名是数字或包含特殊字符时使用 query()
是否可以在熊猫中使用查询方法,其中列没有名称或其名称中有特殊字符?我想使用配置文件中的查询字符串,但对于某些列,这不起作用。我知道有效的 Python 标识符限制 ,但我想知道是否还有其他特殊关键字,例如我没见过的 index
python - python中数学函数的优化和加速
这个数学函数的目的是使用二面角计算两个(或多个)蛋白质结构之间的距离:
例如,它在结构生物学中非常有用。我已经使用 numpy 在 python 中编写了这个函数,但目标是更快地实现。作为计算时间参考,我使用 scikit-learn 包中提供的欧几里德距离函数。
这是我目前拥有的代码:
9.44 毫秒非常快,但如果您需要运行一百万次,它会非常慢。现在的问题是,如何做到这一点?你下一步怎么做?赛通?PyOpenCL?我对 PyOpenCL 有一些经验,但是我从来没有编写过像这个一样复杂的东西。我不知道是否可以像使用 numpy 一样在 GPU 上一步计算二面角距离以及如何进行。
感谢你们对我的帮助!
编辑:谢谢你们!我目前正在研究完整的解决方案,一旦完成,我会将代码放在这里。
赛通版本:
因此,我按照您的链接创建二面角距离函数的 cython 版本。我们获得了一些速度,但不是很多,但它仍然比 numexpr 版本慢(17ms vs 9.44ms)。所以我尝试使用 prange 并行化函数,结果更糟(37.1ms vs 17ms vs 9.4ms)!
我错过了什么吗?
python - python - 在 memmaps 和 CPU 中工作时进行快速矩阵乘法和减少的方法
嗨,我在使用轴缩减进行快速矩阵乘法、加法、function_overwrite 和求和以及在没有 RAM 的 CPU 上使用 numpy.memmaps 时遇到问题(我认为)。只有在使用 numexpr 时,我才能避免从点创建数组。
使用没有 RAM 的 CPU 甚至可以比 numexpr 更快地做到这一点吗?Cython + FORTRAN lapack 或 blass 怎么样?欢迎任何提示或技巧!谢谢你的帮助!
编辑信息: 顺便说一下,我正在使用 Intel Core2Duo t9300 CPU、2.7 GB RAM(由于某些 BIOS 问题,只能从 4GB 看到)、SSD 250GB、旧 Intel GPU 的笔记本电脑工作。由于 Firefox 主要使用带有一些插件的低级别 RAM,编码所剩无几,所以这就是我避免使用它的原因 xD。
而且我觉得我在编程方面处于高级水平(步骤 1/1000),而现在我不知道代码在硬件上是如何工作的——我只是在猜测(所以我的一些想法可能会出现 xD)。
编辑: 我在 cython 中编写了一些代码,用于使用 numexpr 和 cython prange for-loop 计算正弦波。
脉动数据(对于 om、eps、Spectra、Amplitude)存储在 OM numpy.memmap 中,时间数据(t、z)存储在 TI numpy.memmap 中。OM 的形状类似于 (4,1,2500),而 TI 的形状类似于 (2,1,5e+5,1) - 我只需要那种形状。
我刚从 Cython 开始,所以它可能没有得到很好的优化。就目前而言,使用 prange 的代码与使用 numexpr 的代码所用的时间相同(包含这部分的所有代码的 RAM 使用率为 100 MB,CPU 为 50%,SSD 较低 - 计算时间为 1-2 分钟)。我尝试使用 memoryviews,但这会创建一些本地副本并使用 RAM,时间会下降。我需要达到高级级别步骤 3/1000 才能了解如何使用内存视图。
python - “当 `op_axes` 为 NULL 时,使用 `oa_ndim == 0` 的弃用警告”在 pandas DataFrame 上执行规范化/计算 z 分数时
为了规范化 pandas DataFrame 中的数据,我编写了以下函数:
但是当我打电话给他们每个人时,我都会收到以下警告:
我看不懂这是怎么回事!会不会影响结果?我在由所有浮点值组成的数据集X
whereX.shape == (102819, 301)
和上调用这些函数。type(X) == <class 'pandas.core.frame.DataFrame'>
python - Numexpr 无法识别浮点类型(稀疏矩阵)
我想评估 python (2.7) 中 numexpr 模块的性能。为此,我创建了一个大小为 (10^5, 10^5) 的随机稀疏矩阵。但是,下面的脚本已经在表达式求值步骤中抛出了一个错误,说它不能识别对象类型。
我究竟做错了什么?
代码:
错误:
回溯(最近一次通话最后):
python - 快速评估大量输入值的数学表达式(函数)
以下问题
以及他们各自的答案让我想到了如何有效地解析一个(或多或少受信任的)用户给出的单个数学表达式(一般而言,按照这个答案https://stackoverflow.com/a/594294/1672565 )对于来自数据库的 20k 到 30k 输入值。我实施了一个快速而肮脏的基准测试,因此我可以比较不同的解决方案。
# 解决方案#1:eval [是的,完全不安全]
# 解决方案#2a:sympy - evalf ( http://www.sympy.org )
# 解决方案 #2b: sympy - lambdify ( http://www.sympy.org )
# 解决方案 #2c: sympy - 用 numexpr [和 numpy] 进行lambdify ( http://www.sympy.org )
# 解决方案#3a:asteval [基于 ast] - 使用字符串魔法 ( http://newville.github.io/asteval/index.html )
# 解决方案#3b (M Newville):asteval [基于 ast] - 解析 & 运行 ( http://newville.github.io/asteval/index.html )
# 解决方案#3c(M Newville):asteval [基于 ast] - 使用 numpy 解析和运行(http://newville.github.io/asteval/index.html)
# 解决方案#4:simpleeval [基于 ast] ( https://github.com/danthedeckie/simpleeval )
# 解决方案#5 numexpr [和 numpy] ( https://github.com/pydata/numexpr )
在我的旧测试机器(Python 3.4,Linux 3.11 x86_64,两个内核,1.8GHz)上,我得到以下结果:
最突出的是eval令人难以置信的速度,尽管我不想在现实生活中使用它。第二个最佳解决方案似乎是numexpr,它取决于numpy - 我想避免的依赖项,尽管这不是硬性要求。下一个最好的事情是simpleeval,它是围绕ast构建的。aeval是另一种基于 ast 的解决方案,它的缺点是我必须首先将每个浮点输入值转换为字符串,而我找不到解决方法。sympy最初是我最喜欢的,因为它提供了最灵活且显然最安全的解决方案,但它最终以与倒数第二个解决方案的令人印象深刻的距离排在最后。
更新 1 :使用sympy有一种更快的方法。见解决方案 2b。它几乎和numexpr一样好,尽管我不确定sympy是否真的在内部使用它。
更新 2:sympy实现现在使用sympify而不是简化(正如其首席开发人员 asmeurer 所推荐的那样 - 谢谢)。它不使用numexpr,除非明确要求这样做(参见解决方案 2c)。我还添加了两个基于asteval的明显更快的解决方案(感谢 M Newville)。
我有哪些选择可以进一步加快任何相对安全的解决方案?例如,是否有其他直接使用 ast 的安全(-ish)方法?