我有一个包含100万个十进制数字的文本文件" e"每行有80位数字,不包括第一行和最后一行,有76位和4位,文件有12501行。我想将它转换为matlab中的向量,每行上的每个数字。我尝试了num2str
函数,但问题是它被转换为例如'7.1828e79'
(13个字符)。我该怎么办?
P.S.1:文本文件的前两行(76和80位)是:
7182818284590452353602874713526624977572470936999595749669676277240766303535 47594571382178525166427427466391932003059921817413596629043572900334295260595630
P.S.2:我用过" dlmread"得到一个12501x1向量,第一行和第二行为7.18281828459045e + 75和4.75945713821785e + 79,问题是当我使用num2str作为第一行值时,我得到:' 7.182818284590453e + 75& #39;作为一个字符串,而不是整个76位数。我的目标是做这样的事情:
e1=dlmread('e.txt');
es1=num2str(e1);
for i=1:12501
for j=1:length(es1(1,:))
a1((i-1)*length(es1(1,:))+j)=es1(i,j);
end
end
e_digits=a1.';
但我得到一个这样的字符串: a1 =' 7.182818284590453e + 754.759457138217852e + 797.381323286279435e + 799.244761460668082e + 796.133138458300076e + 791.416928368190255e + 79 5 ...' 用262521个字符代替100万个数字。
P.S.3:我认为如果我能够以每行一位数的方式操作文本文件并简单地使用dlmread,问题就可以解决了。
答案 0 :(得分:0)
嗯,这并不难,有很多方法可以做到。
首先,您希望使用简单的内容(您想要一个Char数组,以便您可以轻松地操作它以忘记换行符)将您的文件作为Char数组加载:
C = fileread('yourfile.txt'); %loads file as Char Array
D = C(~isspace(C)); %Removes SPACES which are line-breaks
接下来,你想在每个char之间实际附加一个SPACE(这是因为你想使用num2str转换 - 而matlab需要查看空间),你可以使用RESHAPE,STRTRIM或简单的REGEX来做到这一点:
E = strtrim(regexprep(D, '.{1}', '$0 ')); %Add a SPACE after each Numeric Digit
现在您可以使用str2num将其转换为Vector:
str2num(E)'; %Converts the Char Array back to Vector
每行会给你一个数字。
使用你的例子,我得到一个156 x 1的向量,每行需要1位数。
答案 1 :(得分:0)
你可以像这样获得每行数字
fid = fopen('e.txt','r');
c = textscan(fid,'%s');
c=cat(1,c{:});
c = cellfun(@(x) str2num(reshape(x,[],1)),c,'un',0);
c=cat(1,c{:});
这不是唯一可能的方式。 你能说出最后的任务是什么,你打算如何使用电子数字阵列?