Matlab 如何删除向量中所有小于先前任何数字的数字?

Matlab 如何删除向量中所有小于先前任何数字的数字?,matlab,Matlab,我有如下数据集: 1 14.8759 2 14.083 3 0.735268 4 18.2378 5 17.3748 6 4.07867 7 18.2032 8 15.6929 9 4.03338 10 19.0308 11 17.4139 12 17.4139 13 19.8453 14 4.91288 15 20.6746 16 16.578 17 14.8548 18 23.9831 19 19.0691 20 19.0777 21

我有如下数据集:

1   14.8759
2   14.083
3   0.735268
4   18.2378
5   17.3748
6   4.07867
7   18.2032
8   15.6929
9   4.03338
10  19.0308
11  17.4139
12  17.4139
13  19.8453
14  4.91288
15  20.6746
16  16.578
17  14.8548
18  23.9831
19  19.0691
20  19.0777
21  3.24368
22  25.6457
23  -5.95598
24  32.3198
25  8.20419
26  22.3266
27  17.4016
28  9.0672
29  24.8722
30  24.8262
31  19.8966
32  34.7338
33  29.8088
34  33.1393
35  28.1402
36  35.6231
37  26.4872
38  3.2392
39  5.73463
40  26.4754
41  33.9667
42  27.3048
43  34.75
44  37.2759
45  15.6929
46  28.9686
47  44.6922
48  37.2799
49  25.699
50  45.4923
51  32.2579
52  25.699
53  29.7885
54  50.4719
55  20.6746
56  30.6061
57  38.0448
58  11.5342
59  52.9365
60  44.7128
61  38.0448
62  44.6621
63  13.1939
64  28.9542
65  46.3637
66  13.1939
67  10.7318
68  31.4318
69  29.7885
70  22.3399
71  29.7885
72  26.4754
73  55.4135
74  48.8326
75  42.2395
76  19.0174
77  7.4035
78  13.1939
79  33.9055
80  14.8935
81  27.3048
82  6.56548
83  64.4474
84  48.7848
85  59.5214
86  31.4915
87  59.5214
88  19.8966
89  57.0318
90  21.5631
91  20.7273
92  66.0889
93  58.6749
94  20.6803
95  52.1244
96  16.5242
97  51.3028
98  10.7037
99  12.3958
100 26.5265
101 30.6061
102 74.2826
103 50.4806
104 12.3958
105 17.354
106 40.5832
107 19.8514
108 63.6089
109 27.3559
110 9.06318
111 11.564
112 39.7561
113 29.8368
114 17.3615
115 19.0241
116 69.3539
117 35.6231
118 38.8777
119 34.7394
120 60.3455
121 25.6969
122 54.5637
123 25.6969
124 79.2023
125 31.4876
126 28.184
127 13.2268
128 34.7394
129 12.3602
130 29.0096
131 47.9604
132 82.4815
133 77.5533
134 14.8935
135 33.9055
136 16.5172
137 41.4113
138 34.7956
139 64.4558
140 29.8368
141 19.0108
142 26.5265
143 36.4452
144 50.4761
145 4.87781
146 83.3041
147 61.9694
148 26.5265
149 1.5427
150 71.8344
151 24.8158
152 94.7328
153 19.8915
154 36.4452
155 32.2504
156 26.5265
157 89.0202
158 29.8347
159 93.9223
160 87.3855
161 4.89738
162 88.1694
163 24.0448
164 51.2987
165 65.2679
166 89.8386
167 33.9055
168 67.7414
169 88.9942
170 19.0174
171 92.2651
172 49.6527
173 18.1971
174 19.0108
175 33.9667
176 92.2611
177 32.2789
178 92.2577
179 4.89738
180 102.898
181 34.7956
182 95.5292
183 28.9542
184 91.451
185 25.6457
186 74.2944
187 25.6516
188 47.1323
189 34.7338
190 94.7081
191 97.9775
192 105.334
193 89.812
194 93.8991
195 88.1756
196 10.7318
197 49.611
198 97.1618
199 2.40369
200 44.7128
201 35.6263
202 42.1795
203 53.7678
204 70.2067
205 28.9542
206 19.0241
207 111.849
208 19.8915
209 95.5218
210 38.8723
211 101.238
212 19.8393
213 92.2651
214 102.053
215 24.8221
216 116.713
217 88.9912
218 88.1756
219 115.102
220 58.6995
221 19.8393
222 27.3171
223 23.1511
224 53.7678
225 99.6138
226 120.79
227 32.2579
228 90.6265
229 38.0448
230 48.8284
231 111.054
232 112.608
233 66.9162
234 100.431
235 63.6317
236 19.8334
237 35.6263
238 17.3615
239 2.39774
240 29.7885
241 71.0225
242 66.9162
243 25.6457
244 128.908
245 12.3602
246 93.8991
247 123.218
248 24.8221
249 33.1393
250 110.194
251 31.4547
252 12.3958
253 92.2611
254 10.7037
255 90.6302
256 96.3458
257 102.053
258 37.2167
259 93.0788
260 19.0108
261 102.063
262 16.5617
263 49.611
264 135.388
265 117.522
266 92.2879
267 118.378
268 116.706
269 24.0448
270 128.941
271 132.182
272 137.009
273 48.7848
274 32.2789
275 137.826
276 137.009
277 117.522
278 54.5904
279 16.5172
280 141.064
281 63.6317
282 27.3559
283 108.587
284 38.8723
285 140.247
286 106.13
287 135.426
288 67.7371
289 19.8915
290 112.652
291 27.3227
292 117.522
并且希望忽略/删除任何小于其先前值的Y值(并删除其相应的X),并将新数据集放入新文件中,以便所有生成的Y值都将按递增顺序排列。 谢谢。

假设:

data = [1   14.8759
        2   14.083
        3   0.735268
        ... ...      ];
你可以这样做:

keep = false(size(data, 1), 1);
largest = -Inf;
for i = 1:size(data, 1)
    if data(i,2) > largest
        largest = data(i,2);
        keep(i) = true;
    end
end
newdata = data(keep,:)
结果:

newdata =

    1.0000   14.8759
    4.0000   18.2378
   10.0000   19.0308
   13.0000   19.8453
   15.0000   20.6746
   18.0000   23.9831
   22.0000   25.6457
   24.0000   32.3198
   32.0000   34.7338
   36.0000   35.6231
   44.0000   37.2759
   47.0000   44.6922
   50.0000   45.4923
   54.0000   50.4719
   59.0000   52.9365
   73.0000   55.4135
   83.0000   64.4474
   92.0000   66.0889
  102.0000   74.2826
  124.0000   79.2023
  132.0000   82.4815
  146.0000   83.3041
  152.0000   94.7328
  180.0000  102.8980
  192.0000  105.3340
  207.0000  111.8490
  216.0000  116.7130
  226.0000  120.7900
  244.0000  128.9080
  264.0000  135.3880
  272.0000  137.0090
  275.0000  137.8260
  280.0000  141.0640

如果你有很多数据,那么最好使用矢量化。删除for循环将使其更快

假设“A”是第二列(数据)

由于您的第一列只是索引,我们可以暂时保留它(即使它不是索引,您也可以将第二列复制到“A”并继续)

如果您的第一列不是索引,请将其复制为“C”,并将最后一行更改为以下内容

Aout = [C(B>=0);A(B>=0)];         
用于将每个元素与所有其他元素进行比较,并从中生成选择所需行的:

result = data(~any(triu(bsxfun(@lt, data(:,2).', data(:,2)))), :);

我只是注意到我没有标题(X,Y)。我只有两列数字…很有魅力…谢谢你,伙计。我编辑了你的问题标题,所以它符合你接受的答案。因为现在还不清楚,像
458733449
这样的序列会发生什么。用你的公式,你只会删除前3个
Aout = [C(B>=0);A(B>=0)];         
result = data(~any(triu(bsxfun(@lt, data(:,2).', data(:,2)))), :);