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秒)
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并更新。