And*_*ean 4 java matlab protocol-buffers
我从Matlab调用Google Protocol Buffers Java API.这很好用,但我遇到了很大的性能瓶颈.大部分数据作为以下类型的对象返回:
java.util.Collections$UnmodifiableRandomAccessList
Run Code Online (Sandbox Code Playgroud)
它们实际上包含一个浮点列表.我需要将其转换为Matlab矩阵.到目前为止,我发现的最佳方法是致电:
cell2mat(cell(Q.toArray()))
Run Code Online (Sandbox Code Playgroud)
但是,这一行是代码中的巨大性能瓶颈.
注意我知道Google Protocol Buffers的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;
}
}
Run Code Online (Sandbox Code Playgroud)
我看到了:
>> 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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |