matlab に実装されたクラスタリング アルゴリズムの dll バージョンを作成しました。
また、入力データの作業サンプルをダウンロードし(Toy Problem データを使用しています)、それを読み取り、Matlab の既知のデータ型に変換しています。
ただし、アルゴリズムを実行すると、次のエラーが発生します。
... MWMCR::EvaluateFunction エラー ... 連結されている行列の次元が一致していません。エラー => apclusterSparse.m の 178 行目。
これが私のコードです:(すみません?)
public static double[,] ReadSimilarities()
{
string line;
string[] splittedLine;
System.IO.StreamReader file = new System.IO.StreamReader("C:\\Code\\FCT\\Thesis\\similarities.txt");
List<List<string>> values = new List<List<string>>();
List<string> lineValues;
while ((line = file.ReadLine()) != null)
{
splittedLine = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
lineValues = new List<string>(splittedLine.Count());
for (int i = 0; i < splittedLine.Count(); i++)
{
lineValues.Add(splittedLine[i]);
}
values.Add(lineValues);
}
file.Close();
double[,] result = new double[values.Count, 3];
for (int i = 0; i < values.Count; i++)
{
result[i, 0] = Convert.ToDouble(values.ElementAt(i).ElementAt(0));
result[i, 1] = Convert.ToDouble(values.ElementAt(i).ElementAt(1));
result[i, 2] = Convert.ToDouble(values.ElementAt(i).ElementAt(2));
}
return result;
}
public static double[] ReadPreferences()
{
string line;
System.IO.StreamReader file = new System.IO.StreamReader("C:\\Code\\FCT\\Thesis\\preferences.txt");
List<string> values = new List<string>();
while ((line = file.ReadLine()) != null)
{
values.Add(line);
}
double[] result = new double[values.Count];
for (int i = 0; i < values.Count; i++)
{
result[i] = Convert.ToDouble(values.ElementAt(i));
}
return result;
}
public ActionResult Index()
{
ApClusterSparse apClusterSparse = new ApClusterSparse();
double[,] similarities = ReadSimilarities();
double[] preferences = ReadPreferences();
MWNumericArray matLabSimiliaritiesArray = new MWNumericArray(similarities);
MWNumericArray matLabPreferencesArray = new MWNumericArray(preferences);
MWArray argsOut;
try
{
argsOut = apClusterSparse.apclusterSparse(matLabSimiliaritiesArray, matLabPreferencesArray);
}
catch (Exception e)
{
}
return View();
}
ありがとう。