在matlab中查找子数组的原始索引

时间:2016-01-30 21:11:54

标签: arrays matlab optimization

我有一个问题,涉及尝试使用逻辑索引来加速某些处理。解决方案可能与此问题有些相关:

Convert subarray index to array index in MATLAB?

我正在尝试使用逻辑索引而不是使用find,因为它经常声称速度较慢。问题是这样的:

我有四种不同的查找功能,其结果索引被削减。

cix1 = find(crossings_flow < max(flow(k+(0:1))));
cix2 = cix1(find(crossings_flow(cix1) > min(flow(k+(0:1)))));
cix3 = cix2(find(crossings_flow(cix2)-max([flow(ix(cix2)); flow(ix(cix2)+1)]) < 0));
cix4 = cix3(find(crossings_flow(cix3)-min([flow(ix(cix3)); flow(ix(cix3)+1)]) > 0));

cix1的索引被输入cix2。然后依次为cix3cix4。最终结果是我需要cix4的索引,这些索引与称为crossings_flow的向量有关。

用逻辑索引替换cix1很容易:

crossings_flow < max(flow(k+(0:1)))

然后,当我想得到cix2时,如果我做了

cix2 = cix1(crossings_flow(cix1) < max(flow(k+(0:1))) )

然后我得到一个尺寸较小的逻辑数组,因为它只涉及crossings_flow的子数组。

我的问题是,有没有办法逻辑索引这种类型的嵌套查找问题,或者使用find找到最快的方法来执行此操作?这是一段运行多次的代码,因此我正在寻找可以帮助我加快速度的任何事情。所以也许逻辑索引可能会这样做。引用的问题显示了一种方法,但它没有涉及像这个问题的嵌套发现。

0 个答案:

没有答案