我有一个 Java 代码,我想将其转换为 Matlab 代码。有什么具体的方法可以自动执行此操作吗?
这是我必须翻译的 Java 代码:
public static void main(String[] args) {
double[] v1={1, 1.5, 2, 2.3, 3, 3.4};
double[] v2={1.2, 1.3, 1.5, 2, 2.4, 3.1, 3.3, 3.5, 3.9, 4, 5.1, 5.6};
int[] v;
v = calcolate(v1,v2);
int i;
for(i=0; i<v.length; i++)
System.out.println(v[i]);
}
private static int[] calcolate(double[] v1, double[] v2){
int i, j;
int[] v = new int[v1.length];
for(i=0; i<v1.length; i++){
boolean found = false;
for(j=0; j<v2.length; j++){
if(v1[i]<=v2[j] && !found){
v[i] = j;
found = true;
}
}
}
return v;
}
代码的输出是:
0
2
3
4
5
7
这是 vector v
。它包含 vector v2
的索引,对应于 vector v2
中大于或等于 vector v1
的每个元素的元素>.
如果我不能自动完成,Matlab 中是否有任何函数可以用来比较两个不同长度的 vector ?
最佳答案
对于您的算法,您可以使用名为 arrayfun()
的 Matlab 特定功能。它对数组的每个值执行一个函数,并将结果作为新数组返回。与上述代码等效的 Matlab 是:
v1=[1, 1.5, 2, 2.3, 3, 3.4];
v2=[1.2, 1.3, 1.5, 2, 2.4, 3.1, 3.3, 3.5, 3.9, 4, 5.1, 5.6];
arrayfun(@(x) find(x <= v2, 1), v1)
请注意,Matlab 索引从 1 开始(Java 索引从 0 开始),因此输出为 1 3 4 5 6 8
一般来说,您无法自动从 Java 转换为 Matlab,因为这两种语言的组件并不等效 - 例如,Java 数组与 Matlab 矩阵不同,因此它们不一样总是以同样的方式行事。但在许多特定情况下,这并不重要,您可以开发等效的代码。然而,逐行转换并不总是最好的做法,因为每种语言都有自己可以帮助您的特殊功能,例如我引用的 arrayfun()
方法。
关于java - 如何将Java代码转换成Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44718322/