matlab 从矩阵中读取特定数字
matlab read specific numbers from matrix
这是我的问题:
我有一个包含以下数据(示例)的文件:
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。
感谢大家的帮助
首先,如果 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
您可以直接对矩阵进行索引以获得所需的值。
在您的情况下,这将如下所示:
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);
现在数据应该是一个数字数组,因为所有值都是数字。如果是元胞数组,可以使用 cell2mat
将其转换为数值数组。
这是我的问题:
我有一个包含以下数据(示例)的文件:
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。
感谢大家的帮助
首先,如果 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
您可以直接对矩阵进行索引以获得所需的值。
在您的情况下,这将如下所示:
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);
现在数据应该是一个数字数组,因为所有值都是数字。如果是元胞数组,可以使用 cell2mat
将其转换为数值数组。