八度音困难';s";javaMethod“;

八度音困难';s";javaMethod“;,java,matlab,octave,Java,Matlab,Octave,问题是,我试图将java类导入到Octave中。在我的特定示例中,我当时(现在)正在使用javaplex,这是一组java工具,代码用于在Matlab中实现。问题的答案表明,在Matlab中,您将执行以下操作: import edu.stanford.math.plex4.*; api.Plex4.createExplicitSimplexStream(); api.Plex4.createVietorisRipsStream(parameters); 问题中提供的答案表明,在倍频程中执

问题是,我试图将java类导入到
Octave
中。在我的特定示例中,我当时(现在)正在使用
javaplex
,这是一组java工具,代码用于在
Matlab
中实现。问题的答案表明,在
Matlab
中,您将执行以下操作:

import edu.stanford.math.plex4.*;

api.Plex4.createExplicitSimplexStream();
api.Plex4.createVietorisRipsStream(parameters); 
问题中提供的答案表明,在
倍频程中执行此操作的方法是

javaMethod( 'createExplicitSimplexStream', 'edu.stanford.math.plex4.api.Plex4')
这是出色的工作,但后来我遇到了一个奇怪的问题。还有另一种方法叫做
createvietorisristream
。在
Matlab
中,我将使用如下行运行此命令:

import edu.stanford.math.plex4.*;

api.Plex4.createExplicitSimplexStream();
api.Plex4.createVietorisRipsStream(parameters); 
所以我认为,
Octave
中的等效命令是

javaMethod( 'createVietorisRipsStream', 'edu.stanford.math.plex4.api.Plex4')
但是,当我执行此操作时,会出现以下错误:

error: [java] java.lang.NoSuchMethodException: createVietorisRipsStream
我不确定为什么会出现这个错误,而且两者都在同一个JAVA文件(“Plex4”)中。我确实查看了Plex4文件,我注意到
createExplicitSimplexStream
createVietorisRipsStream
之间有两个区别:

  • 有两个
    createExplicitSimplexStream
    实例和六个
    createvietorisristream

  • 有位写着
    。但是,我不知道这是否相关(我没有读过或写过很多java,到目前为止,我已经能够使用,只使用Matlab,而不必深入研究)

  • 下面是一个来自Plex4文件的代码示例,用于
    createExplicitSimplexStream

    public static ExplicitSimplexStream createExplicitSimplexStream(double maxFiltrationValue) {
        return new ExplicitSimplexStream(maxFiltrationValue);
    }
    
    public static VietorisRipsStream<double[]> createVietorisRipsStream(double[][] points, int maxDimension, double maxFiltrationValue, int numDivisions) {
        return FilteredStreamInterface.createPlex4VietorisRipsStream(points, maxDimension, maxFiltrationValue, numDivisions);
    }
    
    下面是一个来自Plex4文件的代码示例,用于
    createVietorisRipsStream

    public static ExplicitSimplexStream createExplicitSimplexStream(double maxFiltrationValue) {
        return new ExplicitSimplexStream(maxFiltrationValue);
    }
    
    public static VietorisRipsStream<double[]> createVietorisRipsStream(double[][] points, int maxDimension, double maxFiltrationValue, int numDivisions) {
        return FilteredStreamInterface.createPlex4VietorisRipsStream(points, maxDimension, maxFiltrationValue, numDivisions);
    }
    
    public static vietorisripstream createvietorisripstream(双[][]点,int-maxDimension,双maxFilterationValue,int-numDivisions){
    返回FilteredStreamInterface.CreatePlexe4VietorisRipsStream(点、maxDimension、MaxFilterationValue、numDivisions);
    }
    

    知道我为什么会出现错误吗?

    请正确阅读Java部分的octave文档,它只有4页,它很好地解释了这一点

    正如我在上一个问题的评论中提到的,使用参数调用java方法的方法是:

    javamethod

    字符串形式的方法名称

    将包作为字符串完全限定的类的名称

    方法的第一个参数

    方法的第二个参数

    …etc

    )

    这是调用“静态”方法的唯一方法;对于普通的“实例”方法,您可以使用
    javaMethod
    并用java对象本身替换类的名称,或者像在java中一样简单地使用它,即
    objectname.methodname(arg1、arg2等)

    我已经在这里实现了教程,供您查看(pdf第14页)。(别忘了先运行修改过的'load_javaplex'脚本)

    倍频程:2>最大尺寸=3;
    倍频程:3>最大过滤值=4;
    倍频程:4>数字刻度=1000;
    倍频程:5>point_cloud=javaMethod('getHouseExample','edu.stanford.math.plex4.examples.PointCloudExamples')
    点云=
    倍频程:6>流=javaMethod('createVietorisRipsStream','edu.stanford.math.plex4.api.plex4',点云,最大维度,最大过滤值,数值分割)
    溪流=
    八度音程:7>persistence=javaMethod('GetModuleArsImplicationalAlgorithm','edu.stanford.math.plex4.api.plex4',最大维度,2)
    坚持=
    倍频程:8>间隔=持久性。计算间隔(流)
    间歇=
    
    (我没有更进一步,因为plot_条形码也需要修改一点;虽然只有几行,但在这里发布太多了,原因是一样的)

    此外,如果您不确定类构造函数、类方法和静态与实例特定的方法是什么意思,不幸的是,这更多地与java有关,尽管这应该是非常入门的内容。这很值得先读一读


    祝你好运

    非常感谢你!我让它运行:)在搞乱它之后,我发现我的问题有两个方面:1)我认为我不需要输入任何参数,它会有一些默认设置;2)我可以输入一个matlab风格的数组,该方法会以某种方式处理转换。我想这些都是很天真的假设。回顾过去,其中一些问题似乎显而易见,但到目前为止,这确实是一次更好地理解java的学习经历。我会多读一读,再次感谢你!我一定会阅读更多文档carefully@Chris不客气,很高兴听到这个消息。如果我是你的话,我会给javaplex开发人员写一封信,指出对开箱即用的倍频程兼容性的需求,而他们自己提供这一点是极其微不足道的(但对于用户来说,情况并非如此,因为他们需要手动翻译所有提供的函数——这很简单,但很乏味,也不必要)。我还想指出octave越来越受欢迎(部分原因是Andrew Ng在Coursera上的出色机器学习纳米学位课程)。如果您想确保matlab与您的倍频程脚本兼容(反之亦然),请将其重定向到这两个问题。@Chris,只需将任何与javaplex相关的调用包装到
    if isOctave
    块,定义如下:我将向他们发送一封电子邮件,让他们知道。感谢matlab兼容性信息!再次,这是一个巨大的帮助