java - 如何将Java代码转换成Matlab

标签 java matlab vector

我有一个 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/

相关文章:

matlab - 从函数句柄创建矩阵 (MATLAB)

c++ - 来自多行文件 C++ 的 vector 矩阵

c++ - std::vector 迭代器作为类成员

java - null != something 和 something != null 之间的区别

java - (Android)如何仅浏览包含音乐的文件夹

c++ - GCC 3.4 与 4.4 对于基于 C++ 的 MEX 文件?

java - 将 Matlab 的 FFT 移植到 native Java

r - 是否有 R 函数在另一个向量中查找向量?

java - 如何在字符串的每个数字前面添加0?

java - 如何制作带有动画的自定义警报对话框包含表情符号