我在MATLAB中有以下类型的代码:
indices = find([1 2 2 3 3 3 4 5 6 7 7] == 3)
Run Code Online (Sandbox Code Playgroud)
这将返回4,5,6 - 数组中元素的索引等于3.现在.我的代码用很长的向量做这种事情.矢量总是排序.
因此,我想要一个用O(log n)替换find的O(n)复杂度的函数,代价是必须对数组进行排序.
我知道ismember,但是据我所知,它并没有返回所有项目的索引,只是最后一个(我需要所有项目).
出于便携性的原因,我需要解决方案仅限MATLAB(没有编译的mex文件等)
如果我问一些非常明显的事情,我道歉.
假设您正在设计一个浮点计算繁重的软件,您可以购买自己的硬件.假设您出于灵活性和易于代码维护的原因而排除FPGA和GPU.
进一步假设您在软件中具有相当水平的并行性.
很长一段时间,这意味着你被x86困住了.
我正在寻找一个客观的基准测试,可以判断现代ARM CPU是否在同一个球场.也许我找错了,但我发现很难找到一个值得信赖的基准(比如LAPACK或者某些物理模拟).我知道性能显然取决于任务,编译器优化目前可能会更好x86,但在这个阶段我真的想要比较数量级.
此外,我觉得很奇怪,你不能真正购买覆盆子PI的东西,但8-64现代核心可以与连接到单一总线的最新智能手机(如最新的Snapdragons)相媲美.如果我弄错了,请纠正我,但这样的解决方案可能有一天会超越FLOPS/$类别中的GPU而且更灵活.