3

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- を入手するにはどうすればよいですか?

助けてくれてありがとう!

4

4 に答える 4

4

J / Linkユーザーガイドには、MathematicaからJavaにグラフィックを送信するためのコードの良い例があります:http: //reference.wolfram.com/mathematica/JLink/tutorial/CallingJavaFromMathematica.html#29556

于 2011-06-16T22:35:47.590 に答える
2

ExportJavaプログラムで読み返すことができるファイルに保存してみませんか? 形式は次のとおりです。

Export["filename.gif",yourPicture]

.gif の代わりに、他のさまざまな形式 (.png、jpg、.eps、.tif) も可能です。

編集

私は Java ユーザーではありませんが、最初のブロックに表示されているコードは、2 番目のコード ブロックに表示されていると主張する出力を生成できないようです。2 番目のブロックは、インタラクティブな Mathematica セッションの出力のように見えますよね? このセッションでは、インプットとアウトプットが混在しています。2 番目のブロックの入力部分を Java プログラムの変数stringListに入れると、Java プログラム内から出力が生成されると思います。

stringList への割り当てをExportファイルに使用するように変更できる場合は、Java プログラムでこの回り道を介してグラフィックを取得できるはずです。

更新パッケージをダウンロードして例を操作した後、ShowMlrSingleRegression による図の出力は、ループで使用した
場合のように、一種の副作用として生成されるようです。これは関数の実際の出力ではないため、参照したり、変数に割り当てたりすることはできません。これにより、回避策やその他の回避策が実際にはかなり困難になります。明らかに、このパッケージは JavaLink での使用を念頭に置いて設計されていません。PrintDoExport

于 2011-06-16T17:07:04.253 に答える
1

画像をディスク上のファイルに保存するよう Mathematica に指示します.上記のファイルの名前は、最初に Java でFile.createTempFile(...)によって生成できます。

于 2011-06-16T17:08:20.967 に答える
0

Java で mathematica を解釈し、mathematica の出力から画像を描画するライブラリを見つけるか、存在しない場合は独自のライブラリを作成する必要があります。

多分あなたはこのライブラリをチェックすることができます...

よろしく、ステファン

于 2011-06-16T17:04:25.467 に答える