问题标签 [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.
numpy - numpy / numexpr python中的重复
我有一个数组x=np.ones(1000)
,想根据递归公式对此执行操作:
以矢量化方式最快的方法是什么?
我知道xx= ne.evaluate(xx1*xx2)
只能管理已经填充的数组。
python - numba guvectorize target='parallel' 比 target='cpu' 慢
我一直在尝试优化一段涉及大型多维数组计算的python代码。我用 numba 得到了违反直觉的结果。我在 MBP 上运行,2015 年中,2.5 GHz i7 四核,OS 10.10.5,python 2.7.11。考虑以下:
我现在可以在各种功能上运行 timeit:
似乎“并行”甚至没有使用单个核心的大部分,因为它的使用top
表明 python 的“并行”达到了 ~40% cpu,“cpu”达到了 ~100%,numexpr 达到了 ~300% .
python-3.x - Python 的 Numexpr 在某些硬件配置上返回所有零数组
我最近发现了 Numexpr 中的一个错误。虽然我已经在他们的 Git hub 上打开了一个问题,但我想我也会在这里利用集体智慧。
简而言之,evaluate
有时(不可预测地)在执行简单的数组操作时会返回不正确的结果。该错误可以通过下面的 Python 代码重现,导致返回零数组而不是正确的结果。虽然示例代码显示了一个乘法,但这个错误在加法和幂运算中也表现出来了。值得注意的是,Numexpr 没有引发错误或警告,计算负载看起来正常(即,在监视任务管理器时,RAM 和 CPU 已按预期征税),并且返回了正确的形状数组。由于这些原因,隔离是一个相当隐蔽的错误!在我们的测试中,此错误仅在以下硬件版本中出现:
- Windows Server 2012 r2,Intel Xeon 2680 v3,2 个处理器,48 个逻辑内核
- Windows 8.1,Intel Xeon 2690,1 个处理器,24 个逻辑内核
在我们的 Windows 7、64 位、Intel i7 机器上完成的数千次软件运行中,这从未体现出来。此外,我们已经多次运行附加代码(使用更大的数组和更多的迭代)并且在 Windows 7、i7 机器上没有看到错误。但是,至强计算机会定期显示它。不幸的是,我们没有任何其他构建可以测试。
其他注意事项:
- 我们从 WinPython 发行版 3.4.3.6 运行。
- 我们没有调用任何支持的 Numexpr 函数,只是
evaluate
......所以我们使用它的默认设置。 - Numexpr 的版本是 2.4.4,包含在 WinPython 3.4.3.6 中
示例代码:
pandas - Numexpr/PyTables:如何从列表/数组传递执行多个条件查询?
我正在使用 PyTables 进行查询(即根据某些条件选择多行),其中包含函数tables.Table.read()
和tables.Table.read_where()
. 这本质上是基于 numpy 和带有 NumExpr 的 pandas:
http://www.pytables.org/usersguide/tutorials.html http://www.pytables.org/cookbook/hints_for_sql_users.html https://github.com/PyTables/PyTables/blob/6782047b9223897fd59ff4967d71d7fdfb474f16/tables/table。 py
在“sql 用户提示”中,一次选择多行的示例是这样的:
假设我更喜欢如下查询:所有等于温度 100 或等于温度 90 的行
这完美地工作。但我想通过“温度值”列表/数组来完成这项任务。
这可能吗?我的想法是我会编写一个函数,让用户输入要查询的值列表,并为每个值执行 OR 查询。
python - 导入 xlwings,从 numexpr 包中丢失文件
我正在尝试开始使用 xlwings,但是当我去导入它时收到一些错误。
我拉起我的 OSX 终端,跑了
点安装 xlwings
那里没问题。启动了蟒蛇
$蟒蛇
然后跑
将 xlwings 导入为 xw
它给了我这个:
/users/Joshua/anaconda/lib/python3.5/site-packages/numexpr/cpuinfo.py:53: UserWarning: [Errno 2] 没有这样的文件或目录: 'arch' stacklevel=stacklevel + 1) /users/Joshua /anaconda/lib/python3.5/site-packages/numexpr/cpuinfo.py:53: UserWarning: [Errno 2] 没有这样的文件或目录:'machine' stacklevel=stacklevel + 1) /users/Joshua/anaconda/lib /python3.5/site-packages/numexpr/cpuinfo.py:76: UserWarning: [Errno 2] 没有这样的文件或目录: 'sysctl' stacklevel=stacklevel + 1):
我尝试卸载并重新安装 numexpr 包
pip 卸载 numexpr 点安装 numexpr
并对 xlwings 做同样的事情,但仍然收到此错误。:/
关于如何获取丢失文件的任何想法?
python - numexpr:临时变量或重复的子表达式?
如果同一个子表达式出现在一个numexpr表达式中的多个位置,它会被重新计算多次(或者 numexpr 是否足够聪明地检测到这一点并重用结果)?
有没有办法在 numexpr 表达式中声明临时变量?这将有两个目标:
- 鼓励 numexpr 考虑缓存和重用,而不是重新计算结果;
- 简化表达式(使源代码更易于阅读和维护)。
我正在尝试计算f(g(x))其中f和g本身都是复杂的表达式(例如,对于基于像素的主题分类,f是一个涉及多个阈值的嵌套决策树,g是一组归一化的差异比率,并且x是多波段光栅图像)。
numpy - 解析函数和线性代数中的大量计算
对于光波前传播中的非标准计算,我需要处理非常大的矩阵(大约 10^6*10^6 个条目),这些矩阵不是稀疏的或以任何方式“可简化”的。
代码大致如下:
这里,Nx, Nq 是大数,deltax, deltaq 是比例因子,u0 是一个合适的向量。实际上,内核不是上面的傅里叶类型,而是更复杂。
当然,矩阵对于 RAM 来说太大了,所以整个过程必须分成更小的块。事实上,我计算内核的行块,然后做相应的点积,得到 u 块。但是,我没有在上面的代码中包含这个过程,以便将注意力集中在主要问题上。
这里有两个耗时的操作:
- 内核的计算
- 矩阵向量乘法
到目前为止,我使用 numexpr 来加速内核计算。因此,这部分使用了多核架构(当前机器:AMD FX 8320,8 核,16 GB RAM)。但是,矩阵向量乘法没有。另外,我没有编译 numpy 来将它调整到我的机器上。这样一来(涉及数百个这样的操作)需要几天时间!
我想,进一步的并行化有可能减少计算时间。但是,我是并行化的完整初学者。谷歌搜索这个主题会导致整个动物园的可能性,并且(作为初学者)很难判断要遵循哪条路线。
您能否推荐一些初学者可以访问的加速程序(特别是涉及并行化)?
numpy - 使用并行 Cython 加速线性变换
我需要加快计算大致如下形式的线性变换:
也就是说,我在规则网格上评估余弦并将我的输入乘以结果矩阵。实际上,核函数(这里是余弦)更复杂,特别是它不是周期性的。因此,FFT 类型的简化是不可能的!
在我的多核机器上,上述转换大约需要 5 秒。现在,我绝对需要加快速度。一个简单的第一次尝试是使用 numexpr:
这利用了并行计算并将执行时间减少到大约 0.9 秒。这很好,但不足以达到我的目的。所以,我的下一个尝试是使用并行 Cython:
我通过执行编译它
从命令行。通过调用转换
产生相当微弱的改进,大约 0.7 秒。
有人知道进一步改进 Cython 代码的可能性吗?
或者,是否有其他更适合这个问题的框架(PyOpenCL、Pythran、Numba、...)?
python - Numexpr 检测线程数小于内核数
我正在使用 numexpr 在远程集群上进行简单的数组添加。我的电脑有 8 个核心,远程集群有 28 个核心。Numexpr 文档说“在初始化期间,Numexpr 将此数字设置为系统中检测到的核心数”但集群给出了此输出。detect_number_of_cores() = 28
detect_number_of_threads()=8
虽然当我尝试手动将线程数设置为其他值时(set_num_threads=20),但数组操作似乎运行得更快。但是 detect_number_of_threads() 仍然给出 8 作为输出。
这是一个错误吗?
python - numexpr, check for the presence of VML
There are many different Python distributions that allow for the installation of complementary modules, sometimes using different tools so that, when one installs a new package, it's not always immediately apparent how the package was built.
A specific question that I'd like to ask in this respect is, was my numexpr
module built against the MKL libraries and, more specifically, the Vector Mathematical Functions code (VML).
Is it possible to check, using Python, if the numexpr
module installed by my distribution supports VML?