【问题标题】:matlab read specific numbers from matrixmatlab从矩阵中读取特定数字
【发布时间】:2015-01-06 16:31:21
【问题描述】:

这是我的问题:

我有一个包含以下数据的文件(示例):

kptn wtk kptc(3) eiglist(:)
1 1.00000 0.0000 -0.5000 0.0000 -8.65212 -8.65212 -2.54501 -2.54501
2 1.00000 0.0000 -0.4500 0.0000 -9.31361 -7.93027 -3.19370 -3.19370
3 1.00000 0.0000 -0.4000 0.0000 -9.90932 -7.14566 -3.77996 -3.77996
4 1.00000 0.0000 -0.3500 0.0000 -10.43755 -6.30634 -4.30047 -4.30047

对于我的情节,我只需要第一个数字(1.. 行数减去第一个)作为 X 值,并将一行中第 5 个数字之后的数字作为我的 Y 值。所以每行我都会有多个 Y 值。所以最后每一行我应该有这样的东西:

X=[1], Y=[-8.65212, -8.65212, -2.54501, -2.54501]

第二行:

X=[2], Y=[-9.31361, -7.93027, -3.19370, -3.19370]

但是,Y 值的数量可能因文件而异,但 X 和 Y 之间的值的数量始终为 4。

感谢大家的帮助

【问题讨论】:

    标签: matlab readfile


    【解决方案1】:

    您可以直接索引到矩阵中以获取所需的值。

    在您的情况下,这将如下所示:

    Data = [1 1.00000 0.0000 -0.5000 0.0000 -8.65212 -8.65212 -2.54501 -2.54501;
    2 1.00000 0.0000 -0.4500 0.0000 -9.31361 -7.93027 -3.19370 -3.19370;
    3 1.00000 0.0000 -0.4000 0.0000 -9.90932 -7.14566 -3.77996 -3.77996;
    4 1.00000 0.0000 -0.3500 0.0000 -10.43755 -6.30634 -4.30047 -4.30047]
    
    %// As for your comment, to start from line 2 use `Data(2:end,whatever)`
    DatatoPlot = [Data(2:end,1) Data(2:end,6:end)]; %// Get the appropriate data using indexing
    

    使用方括号 [] 告诉 Matlab 连接数据,即按照您指定的顺序(此处为水平)将所有数据一个接一个地放置;

    因此DatatoPlot 看起来像这样:

    DatatoPlot =
    
        1.0000   -8.6521   -8.6521   -2.5450   -2.5450
        2.0000   -9.3136   -7.9303   -3.1937   -3.1937
        3.0000   -9.9093   -7.1457   -3.7800   -3.7800
        4.0000  -10.4375   -6.3063   -4.3005   -4.3005
    

    然后你可以绘制结果(或者也可以使用scatter):

    %// Display the result
    figure
    hold on
    for k = 1:size(DatatoPlot,1)
    
    plot(k,DatatoPlot(k,2:end),'*-') %// Y values correspond to 2nd column until the end.
    
    end
    
    xlim([0 5]) %// To see data more clearly
    set(gca,'Xtick',[1:5])
    

    给出这个:

    当然可以根据需要自定义。

    编辑

    根据您的评论,您可以使用importdata 加载您的数据。例如:

    filename = YourFileName;
    delimiterIn = ' '; %// Values are separated by a white space
    headerlinesIn = 1; %// There is 1 headerline, which you want to skip.
    
    Data = importdata(filename,delimiterIn,headerlinesIn);
    

    现在 Data 应该是一个数值数组,因为所有值都是数字。如果是元胞数组,可以使用cell2mat将其转换为数值数组。

    【讨论】:

    • 如何从跳过第一行的文件中填充数据?
    • 请查看编辑后的答案。您需要使用 Data(2:end,whatever) 从第 2 行开始
    • 我明白了。但是在我打开文件 fid=fopen('filename') 之后,如何将文件中的数据放入 DATA.因为您手动填充了 DATA。抱歉,如果我遗漏了什么,但这是我第一次尝试 Matlab。
    • 好吧,我刚刚更新了我的答案。您可能想使用“importdata”。
    【解决方案2】:

    首先,如果 X 和 Y 之间的距离始终为 4,为什么不从样本矩阵中删除前 5 个数字?

    M = sample(:,6:end)
    

    你的 X 是第一列,所以

    X = sample(:,1)
    

    现在您可以为每个 X 绘制 Y

    figure
    for n = 1:length(X)
       plot(whatever you wish to plot)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-30
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多