如何使用 Matlab 将 "Big Data" 写入文本文件
How to write "Big Data" to a text file using Matlab
我正在从连接到 Arduino 的加速度计上获取一些读数,Arduino 又通过串行通信连接到 MATLAB。我想将读数写入文本文件。 10 秒读取将写入大约 1000 个条目,使文本文件大小约为 1 KB。
我将使用以下代码:
%%%%%// Communication %%%%%
arduino=serial('COM6','BaudRate',9600);
fopen(arduino);
fileID = fopen('Readings.txt','w');
%%%%%// Reading from Serial %%%%%
for i=1:Samples
scan = fscanf(arduino,'%f');
if isfloat(scan),
vib = [vib;scan];
fprintf(fileID,'%0.3f\r\n',scan);
end
end
关于改进此代码的任何建议?这会有时间或大小限制吗?此代码将 运行 保留 3 天。
不要使用文本文件,使用二进制文件。 42718123229.123123
在 ASCII 中是 18 个字节,在二进制文件中是 4 个字节。不要不必要地浪费 space。如果您的数据稍后将在 MATLAB 中使用,那么我建议您保存在 .mat
文件中
不要使用单个文件!选择一个合理的文件大小(例如 100Mb),并确保当您获得这么多数据时切换到另一个文件。你可以通过例如每小时保存一个文件。这样,您可以最大限度地减少软件在完成前 2 分钟崩溃时可能发生的错误。
现在知道问题的实际规模了,写一个文本文件就完全没问题了,处理这么小的数据不需要什么特别的。但是你的代码有问题。您正在编写一个随时间增加的变量 vid
。这可能会导致性能不佳,因为您没有使用预分配,并且可能会消耗大量内存。我强烈建议不要保留此变量,如果您需要约会者,请稍后阅读。
您应该考虑的另一件事是验证您的数据。当您收到的样品少于您的预期时,您会怎么做?包括时间戳!请注意,这些时间戳并不精确,因为您是在事后添加它们,但它可以让您确定是否只是缺少一些随机样本(可能会在之后进行插值),或者可能缺少一些连续的 100 个样本系列。
我正在从连接到 Arduino 的加速度计上获取一些读数,Arduino 又通过串行通信连接到 MATLAB。我想将读数写入文本文件。 10 秒读取将写入大约 1000 个条目,使文本文件大小约为 1 KB。
我将使用以下代码:
%%%%%// Communication %%%%%
arduino=serial('COM6','BaudRate',9600);
fopen(arduino);
fileID = fopen('Readings.txt','w');
%%%%%// Reading from Serial %%%%%
for i=1:Samples
scan = fscanf(arduino,'%f');
if isfloat(scan),
vib = [vib;scan];
fprintf(fileID,'%0.3f\r\n',scan);
end
end
关于改进此代码的任何建议?这会有时间或大小限制吗?此代码将 运行 保留 3 天。
不要使用文本文件,使用二进制文件。
42718123229.123123
在 ASCII 中是 18 个字节,在二进制文件中是 4 个字节。不要不必要地浪费 space。如果您的数据稍后将在 MATLAB 中使用,那么我建议您保存在.mat
文件中不要使用单个文件!选择一个合理的文件大小(例如 100Mb),并确保当您获得这么多数据时切换到另一个文件。你可以通过例如每小时保存一个文件。这样,您可以最大限度地减少软件在完成前 2 分钟崩溃时可能发生的错误。
现在知道问题的实际规模了,写一个文本文件就完全没问题了,处理这么小的数据不需要什么特别的。但是你的代码有问题。您正在编写一个随时间增加的变量 vid
。这可能会导致性能不佳,因为您没有使用预分配,并且可能会消耗大量内存。我强烈建议不要保留此变量,如果您需要约会者,请稍后阅读。
您应该考虑的另一件事是验证您的数据。当您收到的样品少于您的预期时,您会怎么做?包括时间戳!请注意,这些时间戳并不精确,因为您是在事后添加它们,但它可以让您确定是否只是缺少一些随机样本(可能会在之后进行插值),或者可能缺少一些连续的 100 个样本系列。