complex、vector<complex>、matrix<complex>型にConjugateメソッドを追加しました。これらは複素数の共役演算を実装しています。。
void OnStart()
{
complex a=1+1i;
complex b=a.Conjugate();
Print(a, " ", b);
vectorc va= {0.1+0.1i, 0.2+0.2i, 0.3+0.3i};
vectorc vb=va.Conjugate();
Print(va, " ", vb);
matrixc ma(2, 3);
ma.Row(va, 0);
ma.Row(vb, 1);
matrixc mb=ma.Conjugate();
Print(ma);
Print(mb);
ma=mb.Transpose().Conjugate();
Print(ma);
}
ONNXモデル出力で「Sequence of maps」型を取り扱うようになりました。
出力レイヤーにMapシーケンスを提供するONNXモデル(ONNX_TYPE_MAPのONNX_TYPE_SEQUENCE)の場合、構造体の動的配列または固定配列を出力パラメータとして渡さなければなりません。この構造体の最初の2つのフィールドは、ONNX_TYPE_MAPのキーと値の型に一致し、固定配列または動的配列でなければなりません。
以下のPythonスクリプトで作成されたiris.onnxモデルをみてみましょう。
from sys import argv
data_path=argv[0]
last_index=data_path.rfind("\\")+1
data_path=data_path[0:last_index]
from sklearn.datasets import load_iris
iris_dataset = load_iris()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)
# ONNXフォーマットに変換
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType
initial_type = [('float_input', FloatTensorType([None, 4]))]
onx = convert_sklearn(knn, initial_types=initial_type)
path = data_path+"iris.onnx"
with open(path, "wb") as f:
f.write(onx.SerializeToString())
作成したonnxファイルをMetaEditorで開きます。 
Mapシーケンスはoutput_probabilityとして渡されます。これは、INT64型(MQL5ではlongに相当)のキーとfloat型の値を持ちます。この出力からデータを受け取るには、以下の構造体を宣言します。
struct MyMap
{
long key[];
float value[];
};
ここでは、適切な型の動的配列を使用しました。この場合、このモデルのMapは常に3つのキーと値のペアを含むので、固定配列を使用することができます。
Mapシーケンスが返されるので、output_probability出力からデータを受け取るためのパラメータとして、そのような構造体の配列を渡す必要があります。この配列は、特定のモデルの特性に応じて、動的または静的にすることができます。例:
MyMap output_probability[];
...
OnnxRun(model,ONNX_DEBUG_LOGS,float_input,output_label,output_probability);