我有几个 csv 格式的文件,其中包含科学数据来检查以 3D 绘制它们。文件内容组织为日期时间、频率(Hz)和强度(dB),如下例所示:
2014-03-15 18:00:00, 19700000.0, -30.19
2014-03-15 18:00:00, 19700781.25, -31.19
2014-03-15 18:00:00, 19701562.5, -30.43
2014-03-15 18:00:00, 19702343.75, -30.37
2014-03-15 18:00:00, 19703125.0, -27.06
对于绘图上下文,3 个值分别代表 x、y、z。
我想创建一个名为datasample的自定义类型,由datetime、float、float类型组成,然后将数组声明为
ILArray<datasample>
是否有从文件加载 ILArray 以进行绘图的特定功能或建议方式?
ILNumerics 可以正确处理第一列的日期时间格式还是让我预处理文件以将其转换为其他内容?
感谢您的支持
在使用以下源代码回答后更新 我已经加载了360 万个点,并且 3d 绘图被平滑地渲染。我需要一些关于如何根据 Z 值为各个点着色的说明。似乎使用具有数百万个输入点的表面有点......很重:-)我可以使用任何性能提示吗?
这是一个屏幕截图:
using ILNumerics;
using ILNumerics.Drawing;
using ILNumerics.Drawing.Plotting;
using System.IO;
using System.Globalization;
private void ilPanel1_Load(object sender, EventArgs e)
{
fsin = new System.IO.StreamReader("testlong.iln");
while(fsin.EndOfStream == false)
{
datarow = fsin.ReadLine();
// Console.WriteLine(datarow);
rowvalues = datarow.Split(',');
inrows = inrows + 1;
tempX.Add(float.Parse(rowvalues[0], CultureInfo.InvariantCulture));
tempY.Add(float.Parse(rowvalues[1], CultureInfo.InvariantCulture));
tempZ.Add(float.Parse(rowvalues[2], CultureInfo.InvariantCulture));
}
fsin.Close();
// now that I know the input size (number of x,y,z tuples), I can
// create and initialize the ILArray :
ILArray<float> datasamples = ILMath.zeros<float>(3, (int)inrows );
label1.Text = String.Format("Data points read: {0:N0}", inrows);
// ... and now I can copy data from the input arrays:
datasamples["0;:"] = tempX.ToArray();
datasamples["1;:"] = tempY.ToArray();
datasamples["2;:"] = tempZ.ToArray();
// these are no longer used so...
tempX.Clear();
tempY.Clear();
tempZ.Clear();
var scene = new ILScene {
new ILPlotCube(twoDMode: false) {
new ILPoints {
Positions = datasamples,
Color = Color.Blue,
// Colors =
Size = 0.5F
}
}
};
// at the end of all modifications, call Configure()
ilPanel1.Scene = scene;
ilPanel1.Scene.Configure();
ilPanel1.Refresh();
}