matlab从矩阵中读取特定数字

时间:2015-01-06 16:31:22

标签: matlab readfile

这是我的问题:

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

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.

感谢所有帮助

2 个答案:

答案 0 :(得分:2)

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

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

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])

给予:

enter image description here

您可以根据需要自定义。

修改

根据您的评论,您可以使用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将其转换为数字数组。

答案 1 :(得分:0)

首先,如果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