【问题标题】:Pass a vector from Matlab to Scala Class将向量从 Matlab 传递到 Scala 类
【发布时间】:2017-02-19 23:59:30
【问题描述】:

我在使用 Scala 时遇到问题,并将一个双向量从 MATLAB 传递给我的 Scala 类。

假设我们有一个这种形式的 Scala 类:

class MyClass {

def myMethod(x: Seq[Double]): Double = {
    val methodValue = for(i <- x.indices) yield { math.pow( x(i),2.0) }
    methodValue.sum
    }

}

我以前编译过这个,匹配我的 Matlab 和 JRE 的 java 版本,以及需要什么

.

我测试了 Seq[Double]、Array[Double] 和 Vector[Double],但没有任何进展

.

现在我想在 MATLAB 中调用这个类并给它一个所需的行向量并得到它的平方和值。

为此,我在 Matlab 中编写了这个 mfile:

clc, clear, close all

javaaddpath(pwd)
javaaddpath('C:\Program Files\scala\lib\scala-library.jar')
javaclasspath('-dynamic')

newInstanceOfClass = MyClass
newInstanceOfClass.myMethod([1 2 3 4])

但我收到一条错误消息:

找不到具有匹配签名的方法“myMethod” 类'MyClass'。

我不知道如何将一个简单的向量传递给这个 Scala 类。有人可以帮我解决这个问题吗?

我也试过用 Matlab 的 javaArray 来解决这个问题,但还是不行

【问题讨论】:

  • 只是想知道:您确定 Matlab 支持调用 Scala 方法/类吗?
  • 您可能想尝试将 MyClass 更改为对象。我没有理由认为 myMethod 是一个实例方法(它基本上需要两个参数:this 和 Seq[Double])。
  • 是的,我很确定 MATLAB 会运行 Scala 类。我成功地运行了一个没有输入参数的简单“Hello World”类。我的问题只是将输入向量传递给我的类,这会产生签名不匹配错误。
  • @Phasmid:将类更改为对象无助于解决主要问题。它只会改变您最初从 Matlab 调用该对象或类的方式。其余的工作是一样的。我们仍然需要传递一个向量,即使在对象形式中我们也会得到一个签名不匹配错误。 (这两种形式我都测试过了)
  • 您是否尝试过将 x 声明为 Any,然后打印 x 的类?这应该可以帮助您弄清楚 Matlab 传入的对象类型。

标签: java matlab scala vector


【解决方案1】:

我想我解决了这个问题:

首先我将 Scala 类更改如下:

class MyClass {

def myMethod(x: Array[java.lang.Double]): Double = {
    val methodValue = for(i <- x.indices) yield { math.pow( x(i),2.0) }
    methodValue.sum
    }

}

我使用java.lang.Double 格式来制作Array[java.lang.Double] 而不是Array[Double],实际上是Array[scala.Double]

最后在我的 Matlab 脚本中,我将所需的向量转换为 javaArray [查看 Matlab 文档],然后通常可以从 Matlab Mfile 运行 Scala 类 :)

【讨论】:

    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 2018-02-03
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    相关资源
    最近更新 更多