我正在从Matlab调用Google协议缓冲区Java API。这工作得很好,但是我遇到了很大的性能瓶颈。大量数据作为以下类型的对象返回:
java.util.Collections$UnmodifiableRandomAccessList
它们实际上包含一个浮动列表。我需要将其转换为Matlab矩阵。到目前为止,我发现的最好方法是致电:
cell2mat(cell(Q.toArray()))
但是,这一行是代码中巨大的性能瓶颈。
请注意,我知道Google协议缓冲区的FarSounder Matlab解析器生成器,不幸的是,这些生成器非常慢。有关我的问题(YMMV)的一些大致基准速度,请参见下文。高就是好。
如果不是为了将其转换java.util.Collections$UnmodifiableRandomAccessList
为Matlab矩阵而产生的开销,那么从Matlab调用Java API的方法将看起来很有前途。
是否有更好的方法将此Java对象转换为Matlab矩阵?
请记住,返回此类型的方法是在自动生成的代码中。
您可能最好编写一小段额外的Java代码,如下所示:
import java.util.List;
import java.util.ListIterator;
class Helper {
public static float[] toFloatArray(List l) {
float retValue[] = new float[l.size()];
ListIterator iterator = l.listIterator();
for (int idx = 0; idx < retValue.length; ++idx ){
// List had better contain float values,
// or else the following line will ClassCastException.
retValue[idx] = (float) iterator.next();
}
return retValue;
}
}
我看到的是:
>> j = java.util.LinkedList;
>> for idx = 1:1e5, j.add(single(idx)); end
>> tic, out = Helper.toFloatArray(j); toc
Elapsed time is 0.006553 seconds.
>> tic, cell2mat(cell(j.toArray)); toc
Elapsed time is 0.305973 seconds.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句