我有一个3D双数组double[,,] surfaceData = new double[5, 304, 304];
,然后用嵌套的for循环填充。它在C#中效果很好,但是如何将其转换为.mat Matlab可读文件?
我正在使用csmatio。我可以用它输出.mat文件:
List<MLArray> mlList = new List<MLArray>();
mlList.Add(mlDouble);
MatFileWriter mfw = new MatFileWriter("SurfaceDataTest.mat", mlList, false);
......,其中mlDouble是csmatio中的MLDouble
对象。这没问题。当我无法直接引用三个索引时(例如,mlDouble
),问题就蔓延到mlDouble[4,3,60]
。相反,usage guidlines建议我像这样填充3D数组...
我已经尝试了许多嵌套的for循环,但尚未找到解决方案。
这是一个凌乱的例子:
for(int i = 0; i < 304; i++)
{
for(int j = 0; j < 304; j++)
{
for(int k = 0; k < 5; k++)
{
mlDouble.Set(surfaceData[k, j, i], i, j * k);
}
}
}
答案 0 :(得分:0)
万一这对任何人都有帮助,我发现使用MatFileHandler
代替csmatio
更容易。
在MatFileHandler中,只需定义一个DataBuilder
:
DataBuilder builder = new DataBuilder();
使用字符串名称和C#对象定义MatLab变量:
var matVar = builder.NewVariable("<VariableNameForML>", csharpvar);
创建要添加的变量列表,即使仅添加一个变量也是如此:
List<IVariable> matList = new List<IVariable>();
matList.Add(matVar);
然后:
var matFile = builder.NewFile(matList);
using (var fileStream = new FileStream("SurfaceData.mat", FileMode.Create))
{
var writer = new MatFileWriter(fileStream);
writer.Write(matFile);
}
希望这可以帮助与我处于同一职位的任何人:)