Python对海量数据的哈希性能

Python对海量数据的哈希性能,python,python-3.x,Python,Python 3.x,技术堆栈: Python 3.8 当为执行此功能(以可接受的格式重新构造数据)时 只有少数100秒的时间戳有效工作(0.022秒) 批量为100000+需要大量时间(约40秒) 其中分组值的长度为250+ def re_struct_data(all_timestamps: List, grouped_values: Dict[String, Dict[Integer, Integer]]): tm_count = len(all_timestamps) start_t

技术堆栈:

  • Python 3.8
当为执行此功能(以可接受的格式重新构造数据)时

  • 只有少数100秒的时间戳有效工作(0.022秒)
  • 批量为100000+需要大量时间(约40秒)
其中分组值的长度为250+

def re_struct_data(all_timestamps: List, grouped_values: Dict[String, Dict[Integer, Integer]]):
    tm_count = len(all_timestamps)

    start_tm = 1607494871
    get_tms = lambda: [None] * tm_count
    data_matrix = {'runTime': get_tms()}

    for i_idx, tm in enumerate(all_timestamps):

        data_matrix['runTime'][i_idx] = float(tm) - start_tm
        for cnl_nm in grouped_values:
            if cnl_nm not in data_matrix:
                data_matrix[cnl_nm] = get_tms()

            value_dict = grouped_values[cnl_nm]
            if tm in value_dict:
                data_matrix[cnl_nm][i_idx] = value_dict[tm]
    return data_matrix
当我为同样的问题做代码分析时,我了解到在
data\u matrix
中有/没有
cnl\u nm
,需要花费大量时间进行哈希运算

我试着换成

  • setdefault()->(与发动机罩下的操作相同)
  • 使用
    .items()
    ->(元组转换+解包)
但这需要更多的时间


有什么改进的建议吗?

使用
defaultdict(get\u tms)
而不是dict,并保留项目,这样就不必重新索引。顺便说一句,对于100秒的项目22毫秒和100秒的项目40秒是相同的效率,如果您的流程是线性的(这里是O(m*n),但不清楚n是否也在增加),那么将项目数乘以1000也会将处理时间增加1000,这并不奇怪……顺便说一句,您可以迭代
分组的_值。items()
,以避免重新索引到其中。并使用
value\u dict.get(tm)
,以避免对其进行双重索引。这将使索引/散列操作的数量减少到每个循环3次(一次是列表索引),而不是当前最坏的情况7次。@Masklin我尝试使用
.items()
。转换为元组和解包会增加响应时间。将尝试使用defaultdict并进行更新。请使用
defaultdict(get_tms)
而不是dict,并保留该项目,这样您就不必重新将其索引。顺便说一句,对于100秒的项目22毫秒和100秒的项目40秒是相同的效率,如果您的流程是线性的(这里是O(m*n),但不清楚n是否也在增加),那么将项目数乘以1000也会将处理时间增加1000,这并不奇怪……顺便说一句,您可以迭代
分组的_值。items()
,以避免重新索引到其中。并使用
value\u dict.get(tm)
,以避免对其进行双重索引。这将使索引/散列操作的数量减少到每个循环3次(一次是列表索引),而不是当前最坏的情况7次。@Masklin我尝试使用
.items()
。转换为元组和解包会增加响应时间。将尝试defaultdict并更新。