使用带有 numba njit 功能的字典

     2023-02-16     286

关键词:

【中文标题】使用带有 numba njit 功能的字典【英文标题】:Using Dictionaries with numba njit function 【发布时间】:2019-07-31 09:30:11 【问题描述】:

当输入和返回是字典时,如何使用numba加速函数?

我熟悉将 numba 用于接受数字并返回数组的函数,如下所示:

@numba.jit('float64[:](int32,int32)',nopython=True)
def f(a, b):
    # returns array 1d array

现在我有一个接受和返回字典的函数。我如何在这里申请 numba?

    def collocation(aeolus_data,val_data):

      ...

      return sample_aeolus, sample_valdata

【问题讨论】:

嗨@Annerl,欢迎来到SO。为了帮助我们回答您的问题,您能否详细说明您正在尝试访问 numba 的哪些优化和模式?您是否尝试过faqs 中的故障排除技巧?您是否能够将您的功能分解为更小的部分并分别对它们应用 @numba 注释? 【参考方案1】:

现在 Numba 版本 43.0 中添加了对字典的支持。虽然它非常有限(不支持列表和设置为键/值)。但是,您可以阅读更新的文档 here for more info。 这是一个例子

import numpy as np
from numba import njit
from numba import types
from numba.typed import Dict

# First create a dictionary using Dict.empty()
# Specify the data types for both key and value pairs

# Dict with key as strings and values of type float array
dict_param1 = Dict.empty(
    key_type=types.unicode_type,
    value_type=types.float64[:],
)

# Dict with keys as string and values of type float
dict_param2 = Dict.empty(
    key_type=types.unicode_type,
    value_type=types.float64,
)

# Type-expressions are currently not supported inside jit functions.
float_array = types.float64[:]

@njit
def add_values(d_param1, d_param2):
    # Make a result dictionary to store results
    # Dict with keys as string and values of type float array
    result_dict = Dict.empty(
        key_type=types.unicode_type,
        value_type=float_array,
    )

    for key in d_param1.keys():
      result_dict[key] = d_param1[key] + d_param2[key]

    return result_dict

dict_param1["hello"]  = np.asarray([1.5, 2.5, 3.5], dtype='f8')
dict_param1["world"]  = np.asarray([10.5, 20.5, 30.5], dtype='f8')

dict_param2["hello"]  = 1.5
dict_param2["world"]  = 10

final_dict = add_values(dict_param1, dict_param2)

print(final_dict)
# Output : hello: [3. 4. 5.], world: [20.5 30.5 40.5]

Link to Google colab notebook.

参考资料: - https://github.com/numba/numba/issues/3644 - https://numba.pydata.org/numba-doc/dev/reference/pysupported.html#dict

【讨论】:

如何在 numba.njit 中进行离散傅里叶变换(FFT)?

...2020-09-2412:59:51【问题描述】:各位程序员们好我正在尝试使用numba.njit装饰器在这个minimalworkingexample中创建一个discreteFouriertransform:importnumbaimportnu 查看详情

使用带有 numba 的 python 类型提示

】使用带有numba的python类型提示【英文标题】:Usingpythontypehintswithnumba【发布时间】:2017-07-0717:00:26【问题描述】:来自numba网站:fromnumbaimportjit@jitdeff(x,y):#Asomewhattrivialexamplereturnx+y有没有办法让numba使用python类型提示(如果提供... 查看详情

numba 不编译带有 numpy 数组的函数

】numba不编译带有numpy数组的函数【英文标题】:numbadoesnotcompileafunctionwithnumpyarrays【发布时间】:2020-10-2710:37:50【问题描述】:这是我的功能def_hargreaves_samani_02(r0,im,tmax,tmin,tavg):"""r0andimarenumpy1Darraydtype=int32tmax,tmin,tavgarenumpy1Darra 查看详情

Numba:@jit 中的并行标志在我的带有 numpy 2D 数组的代码中不起作用

】Numba:@jit中的并行标志在我的带有numpy2D数组的代码中不起作用【英文标题】:Numba:parallelflagin@jitdoesnotworkinmycodewithnumpy2Darrays【发布时间】:2022-01-1703:48:59【问题描述】:首先,我问了这个问题Numba:Whyguvectorizeissoslow?。当我发现... 查看详情

定义数组而不分配它

...时间】:2021-11-1408:23:59【问题描述】:我看到Numba不支持字典列表...因此,我决定改用2DNumpy数组。这很可悲:(我遇到的第二个问题是我想按需创建这个数组。这是一个例子:@nb.njit(parallel=True)defblah(cond=True):ary=Noneifcond:ary=np.zeros(( 查看详情

如何制作一个虚拟的无操作 @jit 装饰器?

...一个什么都不做的虚拟装饰器。如果我关注thesedirections并使用:defnjit(func):returnfunc然 查看详情

使用带有字典数组的字典进行 Swift JSON 解析

】使用带有字典数组的字典进行SwiftJSON解析【英文标题】:SwiftJSONparsingwithDictionarywithArrayofDictionaries【发布时间】:2016-04-0404:26:18【问题描述】:我是使用Swift语言进行iOS开发的初学者。我有一个JSON文件,其中包含如下数据。"suc... 查看详情

Numba 无法使用完整的 GPU

】Numba无法使用完整的GPU【英文标题】:NumbafailingtousethefullGPU【发布时间】:2021-12-1922:23:06【问题描述】:我最近开始使用Numba作为大学作业的一部分,目的是比较Numba和Cuda-C之间特定的GPU并行代码的性能。我已经用Cuda-C编写了代... 查看详情

使用 alamofire 发布带有字典和字典数组的 JSON 对象

】使用alamofire发布带有字典和字典数组的JSON对象【英文标题】:postJSONobjectwithadictionaryandanarrayofdictionariesusingalamofire【发布时间】:2017-03-2817:51:28【问题描述】:我正在尝试像这样发布一个对象:"simulation":,"simOptions":[,]并尝试通... 查看详情

无法使用 AFNetworking 发布带有数组的字典

】无法使用AFNetworking发布带有数组的字典【英文标题】:Can\'tpostdictionarywitharraywithAFNetworking【发布时间】:2014-12-1615:42:51【问题描述】:显然,服务器无法理解我的数组字典。这是我写的NSURL*url=[NSURLURLWithString:@"http://"];self.manager... 查看详情

如何在带有嵌套字典的嵌套循环中正确使用字典“.update”函数[重复]

】如何在带有嵌套字典的嵌套循环中正确使用字典“.update”函数[重复]【英文标题】:HowdoIcorrectlyusethedictionary".update"functioninnestedloopswithnesteddictionaries[duplicate]【发布时间】:2021-08-1001:46:57【问题描述】:因此,我从Web服... 查看详情

带有使用数组字典的部分的 SwiftUI 列表

】带有使用数组字典的部分的SwiftUI列表【英文标题】:SwiftUIListwithsectionsusingdictionaryofarray【发布时间】:2021-02-1114:38:50【问题描述】:我返回了一组用户。我想按创建日期对它们进行分组,然后在带有部分的SwiftUI列表中显示它... 查看详情

如何在一个简单的功能上 Cythonize / 允许 numba.jit:(在网络中查找三角形)

】如何在一个简单的功能上Cythonize/允许numba.jit:(在网络中查找三角形)【英文标题】:HowtoCythonize/allownumba.jitonasimplefunction:(FindingTrianglesinnetwork)【发布时间】:2021-09-1507:46:59【问题描述】:背景故事:我一直在寻找一种高性能... 查看详情

使用多处理时避免重新编译 numba 代码

】使用多处理时避免重新编译numba代码【英文标题】:Avoidrecompilationofnumbacodewhenusingmultiprocessing【发布时间】:2020-12-3116:05:28【问题描述】:我一直在使用numba进行多处理。唯一的问题-numba会分别重新编译每个进程的代码。(当进... 查看详情

Numba 可以与 Tensorflow 一起使用吗?

】Numba可以与Tensorflow一起使用吗?【英文标题】:CanNumbabeusedwithTensorflow?【发布时间】:2017-04-2904:40:36【问题描述】:Numba可以用来编译与Tensorflow接口的Python代码吗?IE。Tensorflow宇宙之外的计算将使用Numba运行以提高速度。我还... 查看详情

python带有排名功能的python字典类,来自pythoncookbook2ch5.14(代码片段)

查看详情

使用 numba 加速 for 循环

】使用numba加速for循环【英文标题】:Usenumbatospeedupforloop【发布时间】:2016-06-1709:59:51【问题描述】:据我所知,numba可以显着加快Python程序的速度。使用numba可以提高程序的时间效率吗?importnumpyasnpdeff_big(A,k,std_A,std_k,mean_A=10,mean... 查看详情

python使用numba的简单示例。(代码片段)

查看详情