在matlab中排序计时器

时间:2010-04-27 16:48:28

标签: matlab

好吧,这似乎是一个简单的问题,但我遇到了问题 我为每个数据集设置了一个计时器,它不正确地重置,因此我的计时混合了。 有任何想法要纠正吗?不会丢失任何数据。 实施例

理想情况下,

计时器应该是

  

计时器,我的读取   1 3
  2 4
  3 5
  4 6
  5 1
  6 2

如何更改colum 2或创建一个新的colum,其读取像colum 1而不更改具有数据的行的顺序 这只是一个例子,因为我的文件长度是86000长,我也错过了我不想错过的计时器,这在那段时间内没有实现数据。

感谢

编辑:我不想更改其他列。 coulm 1是gps计数器,因此由于其他一些问题,它不与comp计时器同步。我只想更改第一行,使其从高到低而不影响其他行。也照顾丢失的分数(如果我不关心丢失的分数,那么简单的n = 1:max会起作用。

缺少计时器表示

缺少数据。例如,我有4,5,8,9缺少6,7

好的,让我尝试编辑agian 它是一个8600x 80的数据矩阵: 计时器是一行,应该从0到8600 但计时器从奇数时间开始,所以我从中间开始数据,比方说3400,所以在中间我的计时器变为0然后又变回1。 但我的其他行很好。我只需要根据计时器作为时间绘制其他2套。 我不能使用T = 1:长度(文件),因为它忽略错过的时间戳(计时器)

例如我的数据读起来像

  

计时器,我的读取   1 3
  2 4
  3 5
  4 8
  5 9
  8 1
  9 2

所以你可以看到缺少时间戳6,7。 如果我使用n = 1:长度(文件) 我会的 1 2 3 4 5 6 7 这是错的 我想要 1 2 3 4 5 8 9

不改变其他行的顺序,所以我不能对整个文件使用sort。

1 个答案:

答案 0 :(得分:2)

我假设以下问题

数据说

3 100
4 101
5 102
NaN 0
1 104
2 105

你想要

1 100
2 101
3 102
NaN 0
4 104
5 105

我会解决这个问题:

%# create test data
data = [3 100
    4 101
    5 102
    NaN 0
    1 104
    2 105];

%# find good rows (if missing data are indicated by zeros, use 
%# goodRows = data(:,1) > 0;
goodRows = isfinite(data(:,1));

%# count good rows
nGoodRows = sum(goodRows);

%# replace the first column with sequential numbers, but only in good rows
data(goodRows,1) = 1:nGoodRows;

data =

     1   100
     2   101
     3   102
   NaN     0
     4   104
     5   105

编辑1

这次我也许明白你的问题

数据说

4 101
5 102
1 104
2 105

你想要

1 4 101
2 5 102
4 1 104
5 2 105

这可以通过以下方式实现

%# test data
data = [4 101
    5 102
    1 104
    2 105];

%# use sort to get the correct order of the numbers and add it to the left of data
out = [sort(data(:,1)),data]

out =

     1     4   101
     2     5   102
     4     1   104
     5     2   105

编辑2

请注意,out是EDIT 1中解决方案的结果

您似乎想要绘制数据,以便没有缺失值的条目。一种方法是用点做一个图 - 没有一个点用于丢失数据。

plot(out(:,1),out(:,3),'.')

如果要绘制被中断的行,则必须将NaN插入out

%# create outNaN, that has NaN-rows for missing entries
outNaN = NaN(max(out(:,1)),size(out,2));
outNaN(out(:,1),:) = out;

%# plot
plot(out(:,1),out(:,3))