我正在努力寻找一个Numpy等效的解决方案,用于实现Matlab中的特定编码“模式”,使用ismember。
不幸的是,这段代码往往是我Matlab脚本中耗费大部分时间的地方,因此我想找到一个高效的Numpy等效方案。
基本模式包括将子集映射到更大的网格上。我有一组键值对作为平行数组存储,我想将这些值插入到以相同方式存储的更大的键值对列表中。
具体而言,假设我有季度GDP数据,我将其映射到按月计算的时间网格中,如下所示。
quarters = [200712 200803 200806 200809 200812 200903];
gdp_q = [10.1 10.5 11.1 11.8 10.9 10.3];
months = 200801 : 200812;
gdp_m = NaN(size(months));
[tf, loc] = ismember(quarters, months);
gdp_m(loc(tf)) = gdp_q(tf);
请注意,并非所有季度都出现在月份列表中,因此需要使用tf和loc变量。我在StackOverflow上看到过类似的问题,但它们要么只提供纯Python解决方案(这里),要么在使用numpy时不返回loc参数(这里)。
在我的特定应用领域中,这种代码模式经常出现,并占据了我函数大部分的CPU时间,因此这里需要一个高效的解决方案。
也欢迎提供评论或重新设计建议。