【问题标题】:Image from Mathematica to Java从 Mathematica 到 Java 的图像
【发布时间】:2011-06-16 16:44:15
【问题描述】:

我尝试从 Mathematica 中获取图像。 我尝试评估一些使用包中的方法生成图形的 Mathematica 代码。 如果我将代码粘贴到 Mathematica Notebook 中,图形会正确生成。

所以我的问题:

如何将这些图形转换为 Java ???

这是我的示例代码:

ml = MathLinkFactory.createKernelLink("-linkmode launch -linkname 'F:\\APPS\\Wolfram
Research\\Mathematica\\7.0\\mathkernel.exe'");

ml.addPacketListener(new MyPacketListener());
ml.discardAnswer();
PacketListener stdoutPrinter = new PacketPrinter(System.out);
ml.addPacketListener(stdoutPrinter);
// In stringList there is all the INPUT for Mathematica
for (int i = 0; stringList.size() > i; i++) 
{
  System.out.println("Input" + "[" + i + "]" + stringList.get(i));
  ml.evaluate(stringList.get(i));
  ml.discardAnswer();   
 }
ml.close();



class MyPacketListener implements PacketListener {
public boolean packetArrived(PacketArrivedEvent evt)
        throws MathLinkException {
    if (evt.getPktType() == MathLink.TEXTPKT) {
        KernelLink ml = (KernelLink) evt.getSource();
        System.out.println(ml.getString());
    }
    return true;
 }

输出是:

<<CIP`ExperimentalData`
<<CIP`MLR`
dataSet = CIP`ExperimentalData`GetQSPRDataSet02[];
CIP`Graphics`ShowDataSetInfo[{"IoPairs", "InputComponents", "OutputComponents"},  
    dataSet];
Number of IO pairs = 2169


Number of input components = 130

Number of output components = 1

mlrInfo = CIP`MLR`FitMlr[dataSet];
mlrInfoInInputForm = InputForm[mlrInfo];
pointSize = 0.025;
CIP`MLR`ShowMlrSingleRegression[{"ModelVsDataPlot", "CorrelationCoefficient"}, 
  dataSet, mlrInfo, GraphicsOptionPointSize -> pointSize];

(*-Graphics-*)
(*
Out 1 : Correlation coefficient = 0.999373
*)
pointSize = 0.01;
CIP`MLR`ShowMlrSingleRegression[{"AbsoluteSortedResidualsPlot", 
   "AbsoluteResidualsStatistics", "RMSE"}, 
   dataSet, mlrInfo, GraphicsOptionPointSize -> pointSize];

(*-Graphics-

Definition of 'Residual (absolute)': Data - Model

                                                                        -1
Out 1 : Residual (absolute): Mean/Median/Maximum Value = 1.4 / 9.84 × 10   / 

             1
>   1.79 × 10

Root mean squared error (RMSE) = 2.063

*)

我如何获得这些 -Graphics- ?

感谢您的帮助!

【问题讨论】:

    标签: java graphics wolfram-mathematica jlink


    【解决方案1】:

    J/Link 用户指南有很好的代码示例,用于将图形从 Mathematica 发送到 Java: http://reference.wolfram.com/mathematica/JLink/tutorial/CallingJavaFromMathematica.html#29556

    【讨论】:

    • @Jujo 我也试过了,它有效!您使用哪个版本的 Mathematica 以及用于哪个平台?
    • 我在 x64 Windows 7 机器上使用 Mathematica 7 版本。问题是,这些图形不是实际输出,它们将通过 cip 包间接创建。因此,如果有任何可能获得这些图形,请告诉我 ;)
    【解决方案2】:

    您为什么不将Export 写入一个文件,然后您可以在 Java 程序中读回该文件?格式为:

    Export["filename.gif",yourPicture]
    

    除了 .gif,还可以使用各种其他格式(.png、jpg、.eps、.tif)。

    编辑

    我不是 Java 用户,但您在第一个块中显示的代码似乎无法产生您声称在第二个代码块中显示的输出。第二个块看起来像一个交互式 Mathematica 会话的输出,对吧?在这个会话中,输入和输出是混合的。我猜如果您将第二个块的输入部分放在 Java 程序中的变量 stringList 中,您将在 Java 程序中生成输出。

    如果您可以将分配更改为 stringList 以使用 Export 到文件,那么您应该能够通过 Java 程序中的此弯路获取图形。

    更新
    下载包并使用您的示例后,ShowMlrSingleRegression 输出的图形似乎是一种副作用,就像您在Do 循环中使用Print 时发生的情况一样。它不是函数的实际输出,因此无法引用它或将其分配给变量。这使得Export 解决方法和任何其他方法实际上相当困难。显然,这个包在设计时并没有考虑到使用 JavaLink。

    【讨论】:

    • 这似乎可以解决我的问题。是否可以保存任何 Grahpics Mathematica 将丢弃的内容?这样我就不必知道包是否生成图形?!
    • @Jujo mathematica 几乎可以将任何图形保存到文件中(以多种格式)。评论中的第二个问题有点不清楚……
    • 如果这些图形只是副作用,我该如何保存它们?
    • 在交互式会话中,您可以简单地进行剪切和粘贴(甚至粘贴到导出命令中)。我不认为你可以通过 mathlink 做到这一点(但是,我没有太多使用它)。您可能会考虑进入 CIP 包并添加/更改命令,以便将图形作为输出。可能不是很困难。
    • 是的,我认为 Mathlink 无法做到这一点。所以我会尝试更改 CIP 命令。谢谢
    【解决方案3】:

    告诉 Mathematica 将图像保存到磁盘上的文件中。该文件的名称可以由File.createTempFile(...)首先在Java中生成。

    【讨论】:

    • 所以不能直接获取这些图片?
    • 协议需要支持。它似乎不是您正在使用的那个。
    【解决方案4】:

    您必须找到一个可以解释 java 中的mathematica 并从mathematica 输出中绘制一些图片的库,或者,如果它不存在,则创建您自己的。

    也许你可以检查this library...

    问候, 斯蒂芬

    【讨论】:

    • 有一些方法可以从 Mathematice 生成图像并将其导入 Java,例如 evaluateToImage()。但我的问题是,加载包中的方法生成我的图像,而不是 Java 方法。
    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多