【发布时间】:2014-09-26 20:22:50
【问题描述】:
我正在使用 ILNumerics 读写 matfile。我从数据库中获取一些数据作为 object[,] 因为它包含数字和标题(字符串)。
object[,] loaddata 的数据结构是System.String 和System.Double 的混合,前两列和第一行包含字符串rest doubles。我想将双打写入matfile。尺寸大致为loaddata[9000,500]。
这是我通过甚至不起作用的系统数组的非常繁琐的绕道:
ILArray<object> loaddata = DBQuery(....);
//this next line has error
var tempoobj = ToSystemMatrix<object>(loaddata["2:end", "1:end"]);
double[,] tempdouble = new double[500, 8784];
Array.Copy(tempoobj, tempdouble, tempoobj.Length);
ILArray<double> B = tempdouble;
using (ILMatFile matW = new ILMatFile())
{
B.Name = "power";
matW.AddArray(B);
matW.Write(@"C:\Temp\Test.mat");
}
使用来自这里的 ToSystemMatrix 函数 How to convert ILArray into double[,] array? - 我无法正常工作。
任何想法如何简化这个?以及如何使该功能发挥作用(反正它很有用)。
更新
我完成了这项工作,但感觉就像用大锤敲打它......但它来了:
object[,] loaddata = DBQuery(...);
for (int i = 0; i < loaddata.GetLength(0); i++)
{
loaddata[i, 0] = Convert.ToDouble(0);
loaddata[i, 1] = Convert.ToDouble(0);
}
for (int i = 0; i < loaddata.GetLength(1); i++)
{
loaddata[0, i] = Convert.ToDouble(0);
}
double[,] tempdouble = new double[loaddata.GetLength(0), loaddata.GetLength(1)];
Array.Copy(loaddata, tempdouble, loaddata.Length);
ILArray<double> B = tempdouble;
using (ILMatFile matW = new ILMatFile())
{
B.Name = "power";
matW.AddArray(B["1:end","2:end"].T);
matW.Write(@"C:\Temp\Test.mat");
}
我也尝试使用 ILCell,但 ILCell loaddata = DBQuery(...) 和 cell(loaddata) 抛出错误。
有什么办法可以让它更整洁吗?
【问题讨论】:
-
您能否举例说明您的
ILArray<object>数据的结构? -
请看第二段有问题
-
我对 ILNumerics 的工作原理了解有限,您的数组中的对象类型是什么? IE。你能显示
loaddata.First().GetType()的输出吗? -
@decPL:对不起,也许我不明白,但我确实运行了你所说的以及 loaddata.Last().GetType() 并且如第二段所述,基础类型是 System.String 和 System 。双倍的。或者你是什么意思?抱歉,我仍然是一名学习者,不胜感激!
-
别担心,我们每天都在学习(我现在似乎正在学习 ILNumerics ;))。基本上我需要知道 - 你如何将
ILArray<object>中的单个条目翻译成双精度。如果你知道如何做到这一点,那么为整个系列做这件事似乎很简单(是的,我愿意分享:P)。
标签: c# ilnumerics