从MATLAB文本文件中读取N个整数



我试图使用MATLAB编写一个脚本,该脚本从txt文件读取(其中100*3元素写在单列中)。我想一次读取它们的100个元素并应用一个合适的指数函数。这是我写的:

defaultPath = 'my/default/path/';    
prompt = 'file name? ';    
fileName = input(prompt,'s');    
fullPath = strcat(defaultPath,fileName);    
fileID = fopen(fullPath);    
for h = 1:3
    buff = textscan(fileID, '%d', 100);
    y=buff';
    x = zeros([100, 1]);
    for j = 1:100
        x(j,1) = j;
    end
    f = fit(x,y,'exp1');
    plot(f,x,y);
end

但是它给了我这个错误:

X and Y must have the same number of rows.

您的主要问题可能是fit的两个输入向量形状不同:一个是size [100 1],另一个是[1 100],即一个是列向量,另一个是行。我的建议是:

defaultPath = 'my/default/path/';
prompt = 'file name? ';
fileName = input(prompt,'s');
fullPath = strcat(defaultPath,fileName);
fileID = fopen(fullPath);
for h = 1:3
    buff = textscan(fileID, '%d', 100);
    y=buff{1}';
    x = 1:length(y);
    f = fit(x,y,'exp1');
    figure; %open new window for plotting each slice of the data
    plot(f,x,y);
end
fclose(fileID);

请注意,我在绘图之前添加了一个figure调用,以便将3组数据绘制在单独的图形上(否则默认行为将是每个plot覆盖同一个figure中的前一个。

我还改变了x的定义,使其显式匹配y的长度,这将防止一些错误,如果有问题的读取和y有不寻常的长度。无论如何,最好避免神奇的数字,尽可能用其他数字来定义一切。

可以这样使用csvread:

f = csvread(STRING_OF_FILE_NAME);

f将是包含数据的矩阵。

最新更新