在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文件,发现createVietorisRipsStream
和createExplicitSimplexStream
之间有两个区别:
有createVietorisRipsStream
的两个实例和<double[]>
的六个实例
有些地方说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()
关于我为什么要得到错误的任何想法吗?
答案 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有关,尽管它应该是介绍性的东西。值得先阅读一下。
祝你好运!