我有一个
MWCellArray
对象,在代码中显示如下(使用 DLL 集成):
MWCellArray movieResults = (MWCellArray) RecommendationResults[0];
int[] dim = movieResults.Dimensions;
MessageBox.Show("rows: " + dim[0].ToString() + " colums: " + dim[1].ToString());
MessageBox.Show(movieResults.ToString());
MessageBox.Show(movieResults[1][20].ToString());
矩阵是二维的,具有
dim[0] = 3
和 dim[1] = 3
。完整对象上的 ToString() 返回:
最后一行中的第一个维度似乎正确捕获了行,但第二个维度似乎捕获了第一列的各个字符。在这里,我预计索引 20 会失败,因为我们只有 3 列,所以我的问题是如何处理输出? MatLab 的文档相当有限。
一个小解决方法。您可以在 MatLab 中实现一个获取矩阵元素的函数:
function x = getmatrixelement(A, r, c)
[Rows, Columns] = size(A);
if ((r <= Rows) && (c <= Columns))
x = A(r, c);
end
然后从 C# 中,您可以填充数组或直接处理结果:
MWCellArray movieResults = (MWCellArray) RecommendationResults[0];
int[] dim = movieResults.Dimensions;
for (int row = 1; row <= dim[0]; row++)
{
for (int column = 1; column <= dim[1]; column++)
MWArray[] results = recommender.getmatrixelement(1, movieResults, row, column);
MWCellArray cell = (MWCellArray) results[0];
MessageBox.Show(cell.ToString());
}
}
注意
recommender
是提供 getmatrixelement
函数的类的实例。这可以很容易地适应数值 MatLab 数组。