如何导入非逗号/制表符分隔的ASCII数值数据并渲染成向量(在matlab中)

时间:2014-04-22 08:05:26

标签: matlab import ascii matlab-figure

我想将10万个pi数字导入matlab并将其作为矢量进行操作。我已复制并粘贴here中的这些数字并将其保存在文本文件中。我现在在导入这些数字并将它们渲染为矢量时遇到了很多麻烦。

我找到了this函数来计算matlab中的数字。然而,即便如此,我也无法将输出转换为矢量,然后我就可以绘制。 (另外,对于100,000个数字来说,它至少在我的计算机上很慢。)

2 个答案:

答案 0 :(得分:0)

使用textscan

fid = fopen('100000.txt','r');
PiT = textscan(fid,'%c',Inf);
fclose(fid);

PiT是一个单元格数组,因此将其转换为chars:

的向量
PiT = cell2mat(PiT(1));

现在,你想要一个int向量,但你必须丢弃小数周期才能使用标准函数:

Pi = cell2mat(textscan(PiT([1,3:end]),'%1d', Inf));

注意:如果您删除(手动)句点,则可以一次性完成:

fid = fopen('100000.txt','r');
Pi = cell2mat(textscan(fid,'%1d',Inf));
fclose(fid);

修改

以下是使用fscanf的另一种解决方案,因为textscan可能不会返回单元格类型的结果。

使用fscanf

阅读文件
fid = fopen('100000.txt','r');
Pi = fscanf(fid,'%c');
fclose(fid);

然后只取数字并将字符串转换为数字:

Pi = int32(Pi((Pi>='0')&(Pi<='9')))-int32('0');

函数int32可能会被其他转换函数替换(例如double)。

答案 1 :(得分:0)

可以在一行中完成。

当您修改文本文件以包含逗号后数字 14 ... 时,您可以使用fscanf来获取所需的矢量。

pi = fscanf( fopen('pi.txt'), '%1d' );  fclose all

或不修改文件:

pi = str2double( regexp( fscanf( fopen('pi.txt') ,'%1c'), '[0-9]', 'match'));