八度的“ javaMethod”的困难

时间:2018-08-15 02:21:36

标签: java matlab octave

this问题中,我试图将Java类导入Octave。在我的特定示例中,我正在(并且正在)与javaplex一起工作,Matlab是一组Java工具,带有在Matlab中实现的代码。该问题的答案表明,而在import edu.stanford.math.plex4.*; api.Plex4.createExplicitSimplexStream(); 中,您将执行以下操作:

Octave

问题中提供的答案表明,在javaMethod( 'createExplicitSimplexStream', 'edu.stanford.math.plex4.api.Plex4') 中执行此操作的方法是

createVietorisRipsStream

这很好,但是后来我遇到了一个奇怪的问题。还有另一种称为Matlab的方法。在api.Plex4.createVietorisRipsStream(parameters); 中,我将使用以下行来运行它:

Octave

所以我认为javaMethod( 'createVietorisRipsStream', 'edu.stanford.math.plex4.api.Plex4') 中的等效命令应该是

error: [java] java.lang.NoSuchMethodException: createVietorisRipsStream

但是,当我这样做时,出现以下错误:

createExplicitSimplexStream

我不确定为什么会出现此错误,并且两者都在同一个JAVA文件(“ Plex4”)中。我确实看过Plex4文件,发现createVietorisRipsStreamcreateExplicitSimplexStream之间有两个区别:

  1. createVietorisRipsStream的两个实例和<double[]>的六个实例

  2. 有些地方说createExplicitSimplexStream。我不知道这是否相关(到目前为止,我还没有阅读或编写过多的Java,到目前为止,我已经能够使用tutorial they provided仅使用Matlab,而不必在引擎盖)。

以下是public static ExplicitSimplexStream createExplicitSimplexStream(double maxFiltrationValue) { return new ExplicitSimplexStream(maxFiltrationValue); } 的Plex4文件中的代码示例:

createVietorisRipsStream

以下是public static VietorisRipsStream<double[]> createVietorisRipsStream(double[][] points, int maxDimension, double maxFiltrationValue, int numDivisions) { return FilteredStreamInterface.createPlex4VietorisRipsStream(points, maxDimension, maxFiltrationValue, numDivisions); } 的Plex4文件中的代码示例:

module.hot.accept()

关于我为什么要得到错误的任何想法吗?

1 个答案:

答案 0 :(得分:2)

正确阅读Java章节的八度文档,只有4页,并且解释得很好!

正如我在上一个问题的评论中提到的那样,调用带有参数的Java方法 的方法是:

  

javamethod
      name of method as a string
      name of class fully qualified with packages as a string
      method's first argument
      method's second argument
      ... etc
     )

这是调用“静态”方法的唯一方法;使用常规的“实例”方法,您可以使用javaMethod并用java对象本身替换类的名称,也可以像在Java中那样简单地使用它,即objectname.methodname(arg1, arg2, ... etc)

我在这里已经实施了该教程,供您查看(pdf中的第14页)。 (不要忘了先运行修改后的“ load_javaplex”脚本)。

octave:2> max_dimension = 3;
octave:3> max_filtration_value = 4;
octave:4> num_divisions = 1000;
octave:5> point_cloud = javaMethod( 'getHouseExample', 'edu.stanford.math.plex4.examples.PointCloudExamples')
point_cloud =

<Java object: double[][]>

octave:6> stream = javaMethod( 'createVietorisRipsStream', 'edu.stanford.math.plex4.api.Plex4', point_cloud, max_dimension, max_filtration_value, num_divisions) 
stream =

<Java object: edu.stanford.math.plex4.streams.impl.VietorisRipsStream>

octave:7> persistence = javaMethod( 'getModularSimplicialAlgorithm', 'edu.stanford.math.plex4.api.Plex4', max_dimension, 2)
persistence =

<Java object: edu.stanford.math.plex4.autogen.homology.IntAbsoluteHomology>

octave:8> intervals = persistence.computeIntervals(stream)
intervals =

<Java object: edu.stanford.math.plex4.homology.barcodes.BarcodeCollection>

(我没有做进一步的介绍,因为plot_barcodes也需要进行一些修改;虽然只有几行,但是在这里发表太多了,尽管道理还是一样的。)

此外,如果您不确定类构造函数,类方法以及静态方法和实例特定方法的含义,那么不幸的是,这与Java有关,尽管它应该是介绍性的东西。值得先阅读一下。

祝你好运!