MATLAB排序功能产生篡改结果

时间:2015-07-30 20:51:14

标签: arrays matlab sorting vector

我有一个126个元素的向量,通常正确排序;但是,我总是把它排序,以确保一切正常。
问题是:当数组已经排序时,执行排序会破坏数组的原始值。

我将数组附加到csv文件中并执行下面的脚本,在第一列中插入向量,然后在第二列中对其进行排序,然后检查第三列中的任何差异。

a = csvread('a.csv')
a(:,2)=sort(a(:,1))
a(:,3)=a(:,2)-a(:,1)
result=sum(a(:,3).^2)

enter image description here

您可以很容易地看到前两列不相同,第三列有一些零值。

数组

的语法
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];

1 个答案:

答案 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之后,当它变得不平等时。

我很坦率地感到惊讶,因为您的快照清楚地显示了快照顶部左侧列的值减少,因此您没有发现它们无序。

因此,要么检查您的数据以查看您是否正确输入了数据,要么修改您正在处理的任何流程以确保它可以处理未分类的数据。