我有一个126个元素的向量,通常正确排序;但是,我总是把它排序,以确保一切正常。
问题是:当数组已经排序时,执行排序会破坏数组的原始值。
我将数组附加到csv文件中并执行下面的脚本,在第一列中插入向量,然后在第二列中对其进行排序,然后检查第三列中的任何差异。
a = csvread('a.csv')
a(:,2)=sort(a(:,1))
a(:,3)=a(:,2)-a(:,1)
result=sum(a(:,3).^2)
您可以很容易地看到前两列不相同,第三列有一些零值。
a = [17.4800
18.6800
19.8800
21.0800
22.2800
23.4800
24.6800
25.8800
27.0800
28.2800
29.4800
30.6800
46.1600
47.3600
48.5600
49.7600
50.9600
52.1600
53.3600
54.5600
55.7600
56.9600
58.1600
59.3600
74.8400
76.0400
77.2400
78.4400
79.6400
80.8400
103.5200
104.7200
105.9200
107.1200
108.3200
109.5200
110.7200
111.9200
113.1200
114.3200
115.5200
116.7200
132.2000
133.4000
134.6000
135.8000
137.0000
138.2000
139.4000
140.6000
141.8000
143.0000
144.2000
145.4000
165.4200
166.6200
167.8200
169.0200
170.2200
171.4200
172.6200
173.8200
175.0200
176.2200
177.4200
178.6200
179.9300
181.1300
182.3300
183.5300
184.7300
185.9300
187.1300
188.3300
189.5300
201.3700
202.5700
203.7700
204.9700
206.1700
207.3700
236.1100
237.3100
238.5100
239.7100
240.9100
242.1100
243.3100
244.5100
245.7100
246.9100
248.1100
249.3100
239.8400
241.0400
242.2400
276.9900
278.1900
279.3900
280.5900
281.7900
282.9900
284.1900
285.3900
286.5900
287.7900
288.9900
290.1900
277.8200
279.0200
280.2200
281.4200
282.6200
283.8200
285.0200
286.2200
287.4200
288.6200
289.8200
291.0200
291.0700
292.2700
293.4700
295.6900
296.8900
298.0900];
答案 0 :(得分:1)
您的原始载体很遗憾不已排序。因此,对此结果进行排序显然不会给出原始向量应该是什么,因为无序的值将按顺序排列。
您可以使用CSV文件中的读入向量中的diff
进行检查,看看是否存在任何负差异。 diff
取第(i + 1)个值和第i个值之间的差值,如果你的值单调增加,你应该得到正面的差异。我们可以通过查找差异中的值来判断哪些位置受到影响:
a = csvread('a.csv');
ind = find(diff(a) < 0);
我们得到:
>> ind
ind =
93
108
这表示位置93和108是无序启动的位置。位置94和109是它实际发生的地方。让我们检查你的载体的第90-110部分:
>> a(90:110)
ans =
245.7100 % 90
246.9100 % 91
248.1100 % 92
249.3100 % 93
239.8400 %<-------
241.0400
242.2400
276.9900
278.1900
279.3900
280.5900
281.7900
282.9900
284.1900
285.3900
286.5900
287.7900 % 106
288.9900 % 107
290.1900 % 108
277.8200 % <------
279.0200
正如您所看到的,位置93和108在数值上有所下降,因此如果您尝试对结果进行排序然后取得差异,您会注意到位置1到93之间的差异为0 ,但在位置93之后,当它变得不平等时。
我很坦率地感到惊讶,因为您的快照清楚地显示了快照顶部左侧列的值减少,因此您没有发现它们无序。
因此,要么检查您的数据以查看您是否正确输入了数据,要么修改您正在处理的任何流程以确保它可以处理未分类的数据。