问题标签 [numba]

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

python - 删除 numba.lowering.LoweringError: Internal error

我正在使用 numba 来加速我的代码,没有 numba 可以正常工作。但是在使用@jit 之后,它会因以下错误而崩溃:

第 103 行如下,在一个循环中:

wheren是我的代码中已经在上面某处定义的常量。

我怎样才能消除错误?正在发生什么“降价”?我在 64 位机器上使用 Anaconda 2.0.1 和 Numba 0.13.x 和 Numpy 1.8.x。

0 投票
1 回答
3333 浏览

python - 使用 numba 时引发异常

从这里跟进,我不断溢出。所以我试图提出一个例外,以便我确切地知道哪里出了问题。

我有这样的事情:

但我得到这个错误:

我不能在使用 numba 时引发异常吗?我在 64 位机器上使用 Anaconda 2.0.1 和 Numba 0.13.x 和 Numpy 1.8.x。

0 投票
1 回答
416 浏览

python - Numba 向量化最大化所有处理器

有谁知道是否有办法配置 anaconda 以使 @vectorize 不会占用机器中所有可用的处理器?例如,如果我有一台八核机器,我只希望@vectorize 使用四核。

0 投票
2 回答
273 浏览

python - 将数据框拆分为相应命名的数组或系列(然后重新组合)

假设我有一个包含 x 和 y 列的数据框。我想自动将其拆分为与列同名的数组(或系列),处理数据,然后再重新加入它们。手动执行此操作非常简单:

但我想自动化这个。使用 df.columns 很容易获得字符串列表,但我真的想要 [x,y] 而不是 ['x','y']。到目前为止,我能做的最好的就是与 exec 一起解决这个问题:

所以有2个问题:

1)像这样使用 exec 通常不是一个好主意(当我尝试将它与 numba 结合时已经给我带来了问题)——或者那很糟糕?它似乎适用于系列和数组。

2)我不确定利用这里的观点的最佳方式。理想情况下,我在这里真正想做的就是使用 x 作为 df.x 的视图。我假设在 x 是一个数组的情况下这是不可能的,但如果 x 是一个系列,也许是这样?

上面的示例适用于数组,但理想情况下,我正在寻找一种也适用于系列的解决方案。取而代之的是,当然欢迎与其中一个或另一个一起使用的解决方案。

动机:

1)可读性,这可以通过eval部分实现,但我不相信eval可以用于多行?

2)对于像z = x + y这样的多行,这种方法对于系列(我尝试过的示例中的2x或3x)要快一些,对于数组(超过10x)甚至更快。见这里: 数字处理二维数组的最快方法:dataframe vs series vs array vs numba

0 投票
2 回答
2999 浏览

python - 数字处理二维数组的最快方法:dataframe vs series vs array vs numba

编辑添加:我认为 numba 基准测试不公平,请注意以下几点

我正在尝试对以下用例的数字处理数据的不同方法进行基准测试:

  1. 相当大的数据集(100,000+ 条记录)
  2. 100 多行相当简单的代码 (z = x + y)
  3. 不需要排序或索引

换句话说,不需要系列和数据帧的完全通用性,尽管它们包含在 b/c 中,但它们仍然是封装数据的便捷方式,并且通常需要进行预处理或后处理,这确实需要 pandas 的通用性numpy 数组。

问题:基于此用例,以下基准是否合适,如果不合适,我该如何改进它们?

结果(Win 7、3 岁的 Xeon 工作站(四核)。标准和最近的 anaconda 发行版或非常接近。)

编辑以添加(响应 jeff)将 df/series/array 传递给函数而不是在函数内部创建它们的替代结果(即将包含“randn”的代码行从内部函数移动到外部函数):

注意 numba 结果:我认为 numba 编译器必须在 for 循环上进行优化,并将 for 循环减少到单次迭代。我不知道,但这是我能想到的唯一解释,因为它不能比 numpy 快 50 倍,对吧?这里的后续问题: 为什么 numba 比这里的 numpy 快?

0 投票
1 回答
329 浏览

python - Numpy 标量上的二进制操作自动向上转换为 float64

我想在 np.float32 和内置 Python int 和 float 之间进行二进制操作(如加法和乘法),并得到一个 np.float32 作为返回类型。但是,它会自动向上转换为 np.float64。

示例代码:

如果我使用 np.float128 执行此操作,b 也会变成 np.float128。这很好,因为它因此保持了精度。但是,在我的示例中,不需要向上转换到 np.float64 来保持精度,但它仍然会发生。如果我将 2.0(一个 Python 浮点数(64 位))添加到 a 而不是 2,那么强制转换将是有意义的。但即使在这里,我也不想要它。

所以我的问题是:在将二元运算符应用于 np.float32 和内置 Python int/float 时,如何更改已完成的转换?或者,将单精度作为所有计算的标准而不是双精度,也可以算作一种解决方案,因为我不需要双精度。其他人问过这个,似乎没有找到解决方案。

我知道numpy数组和dtypes。在这里,我得到了想要的行为,因为数组始终保留其 dtype。然而,当我对数组的单个元素进行操作时,我得到了不需要的行为。我对解决方案有一个模糊的想法,涉及子类化 np.ndarray(或 np.float32)并更改 __array_priority__ 的值。到目前为止,我还无法让它工作。

我为什么在乎?我正在尝试使用 Numba 编写一个 n-body 代码。这就是为什么我不能简单地对整个数组进行操作。将所有 np.float64 更改为 np.float32 可使速度提高约 2 倍,这很重要。np.float64-casting 行为完全破坏了这种速度,因为我的 np.float32 数组上的所有操作都以 64 精度完成,然后向下转换为 32 精度。

0 投票
4 回答
16878 浏览

python - 为什么在这里 numba 比 numpy 快?

我不明白为什么 numba 在这里击败 numpy(超过 3 倍)。我在这里进行基准测试时是否犯了一些基本错误?似乎是 numpy 的完美情况,不是吗?请注意,作为检查,我还运行了一个结合 numba 和 numpy 的变体(未显示),正如预期的那样,它与在没有 numba 的情况下运行 numpy 相同。

(顺便说一句,这是一个后续问题:Fastest way to numericly process 2d-array: dataframe vs series vs array vs numba

结果:

我在 2012 macbook air (13.3) 标准 anaconda 发行版上运行它。如果相关,我可以提供有关我的设置的更多详细信息。

0 投票
1 回答
172 浏览

python - numba 似乎不起作用

这是我为测试 numba 编写的一些代码

@autojit 被注释掉的结果

使用@autojit 时的结果

这里出了什么问题?

0 投票
1 回答
893 浏览

python - Numba 在频率计数方面比纯 Python 慢

给定一个具有表示为 2D numpy 数组的离散条目的数据矩阵,我试图仅查看某些实例(矩阵的行)来计算某些特征(列)的观察频率。

bincount在做了一些花哨的切片后,我可以很容易地使用 numpy 来做到这一点。在纯 Python 中这样做,使用外部数据结构作为计数累加器,是 C 风格的双循环。

这些是我在运行上述代码时得到的时间:

我的观点是,当我尝试使用 numba 应用 jit 时,我的实现速度会更慢,所以我高度怀疑我把事情搞砸了。

0 投票
1 回答
426 浏览

android - 在 Jetson TK1 上使用 Numbapro

我已经搜索了整个互联网,但我没有找到可靠的答案。我需要指出,我是 GPU 编程的新手,但我刚刚订购了我的 Jetson TK1 单元,因为我喜欢模拟并且我喜欢 Python。我已经在 PC 上试用了 Numpy,但我想将这些模拟带到 Android 上。我读过关于 PyCuda 和 Numba 的文章,但我更喜欢后者,因为它完全是在 python 中,我不必用 C 编写内核。我似乎不明白的是如何(在我的 Jetson TK1 上安装 numbapro ) 我将能够将我的代码指向 Tegra K1 SOC 的多核 ARM CPU,以及我将如何使用 CUDA 6 中可用的统一内存。请注意,Numba 还不支持 ARM LLVM。或者我是否需要启动强制性 C++ 和 CUDA C++ 类才能访问 CPU 内核/线程。