hyhyhye 2023-04-12 16:41 采纳率: 100%
浏览 66
已结题

python的NUMBA装饰符、NUMPY自定义数据类型问题

  我的目的:因为要从数据库读写包含时间、字符的数据并快速分析处理,我想把结构化的包含时间、字符数据的numpy自定义类型数据放入用NUMBA装饰的python函数中计算。
  我的问题:进行了如下四种相关测试都报错
#####测试1,无法创建包含时间类型的NUMPY自定义数据类型
t1 = np.dtype([('age', int), ('date','datetime64')])
x = np.array([(1,''),(2,'2018-05-08')],dtype=t1)
###测试2,把包含时间数据的DF转换为NUMPY,再放入用NUMBA装饰的函数中,也不行。
a1=np.array([1,2,3])
a2=np.array(['2020-03','2020-03-08','2020-03-08 20:00'],dtype='datetime64')
df =pd.DataFrame({'a1':a1,'a2':a2})
print(df.values)
print(df.dtypes)
@njit()
def test(x):
    pass
test(df.values)
###测试3,先创建包含时间数据的DF,再把DF转为NUMPY,再放入用NUMBA装饰的函数中,也不行,
a1=np.array(['2020-03','2020-03-08','2020-03-08 20:00'],dtype='datetime64')# 把
a2=np.array([1,2,3])
df =pd.DataFrame({'a1':a1,'a2':a2})
print(df.values)
print(df.dtypes)
@njit()
def test(x):
    pass
test(df.values)
###测试4,先创建包含字符数据的DF,再把DF转为NUMPY,再放入用NUMBA装饰的函数中,也不行,
a1=np.array(['2020-03','2020-03-08','2020-03-08 20:00'],dtype='str')
a2=np.array([1,2,3])
df = pd.DataFrame({'a1':a1,'a2':a2})
print(df.values)
print(df.dtypes)
@njit()
def test(x):
    pass
test(df.values)
  • 写回答

4条回答 默认 最新

  • 社区专家-Monster-XH 2023-04-12 16:47
    关注

    基于Monster 组和GPT的调写:

    • 以下是提供的四个测试的解释和建议。

    测试1:无法创建包含时间类型的NumPy自定义数据类型
    在这个测试中,您试图创建一个包含时间类型的NumPy自定义数据类型。但是,使用空字符串表示缺失值不是一种常见的做法。您可以使用numpy.datetime64('NaT')来表示缺失的日期时间值。以下是一个更新后的示例代码:

    import numpy as np
    t1 = np.dtype([('age', int), ('date','datetime64[D]')])  # 用 datetime64[D] 表示日期时间
    x = np.array([(1, np.datetime64('NaT')), (2, np.datetime64('2018-05-08'))], dtype=t1)
    
    
    

    测试2、3、4:
    在测试2、3和4中,您将数据框转换为NumPy数组,然后将其传递给用Numba装饰的函数。但是,Numba需要在函数定义之前确定输入数据类型,因此在使用Numba之前,必须明确指定数组的数据类型。这可以通过传递NumPy数组的dtype参数来完成。

    以下是测试2、3和4的更新示例代码:

    import numpy as np
    import pandas as pd
    from numba import njit
    
    # 测试2
    a1 = np.array([1, 2, 3])
    a2 = np.array(['2020-03', '2020-03-08', '2020-03-08 20:00'], dtype='datetime64')
    df = pd.DataFrame({'a1': a1, 'a2': a2})
    x = df.values.astype([('a1', np.int64), ('a2', 'datetime64[D]')])  # 显式指定数据类型
    
    @njit()
    def test(x):
        pass
    
    test(x)
    
    # 测试3
    a1 = np.array(['2020-03', '2020-03-08', '2020-03-08 20:00'], dtype='datetime64')
    a2 = np.array([1, 2, 3])
    df = pd.DataFrame({'a1': a1, 'a2': a2})
    x = df[['a2', 'a1']].to_records(index=False).astype([('a2', np.int64), ('a1', 'datetime64[D]')])  # 显式指定数据类型
    
    @njit()
    def test(x):
        pass
    
    test(x)
    
    # 测试4
    a1 = np.array(['2020-03', '2020-03-08', '2020-03-08 20:00'], dtype='str')
    a2 = np.array([1, 2, 3])
    df = pd.DataFrame({'a1': a1, 'a2': a2})
    x = df.values.astype([('a1', 'U19'), ('a2', np.int64)])  # 显式指定数据类型
    
    @njit()
    def test(x):
        pass
    
    test(x)
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 4月12日

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持