我想将10万个pi数字导入matlab并将其作为矢量进行操作。我已复制并粘贴here中的这些数字并将其保存在文本文件中。我现在在导入这些数字并将它们渲染为矢量时遇到了很多麻烦。
我找到了this函数来计算matlab中的数字。然而,即便如此,我也无法将输出转换为矢量,然后我就可以绘制。 (另外,对于100,000个数字来说,它至少在我的计算机上很慢。)
答案 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'));