Проблемы с функциональным режимом в Matlab - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть двойной массив с именем sample в Matlab, как показано ниже:

 sample = ...
  [0.4375 0.3750 0.5313 0.4375 0.8750 0.3750 0.5313 0.6563 0.3750 0.4375 ...
   0.5313 0.5313 0.8438 0.8438 0.4375 0.5313 0.5313 0.5313 0.4375 0.3750 ...
   0.4375 0.3750 0.3750 0.5313 0.3750 0.8750 0.5313 0.8438 0.4375 0.0313 ...
   0.3750 0.8438 0.8438 0.3750 0.8750 0.8750 0.5313 0.4375 0.8750 1.7813 ...
   0.3750 0.8750 0.3750 0.3750 0.3750 0.4375 0.3750 0.3750 0.8750 0.3750];


whos sample
  Name        Size            Bytes  Class     Attributes
  sample      1x50              400  double   

Проблема в том, что mode (sample) дает мне ноль в результате, и это, очевидно, не правильно.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

(Это не совсем ответ, но больше, чем я могу уместить в комментарии.)

Я с gnovice об этой, скорее всего, проблеме или о том, что вы как-то перегрузили команду mode. Попробуйте which mode, clear mode или просто перезапустите Matlab.


Я не могу воспроизвести, как показано ниже:

>> sample =[...
    0.4375    0.3750    0.5313    0.4375    0.8750    0.3750    ...
    0.5313    0.6563    0.3750    0.4375    0.5313 ...
    0.5313    0.8438    0.8438    0.4375    0.5313    0.5313    ...
    0.5313    0.4375    0.3750    0.4375    0.3750 ...
    0.3750    0.5313    0.3750    0.8750    0.5313    0.8438    ...
    0.4375    0.0313    0.3750    0.8438    0.8438 ...
    0.3750    0.8750    0.8750    0.5313    0.4375    0.8750    ...
    1.7813    0.3750    0.8750    0.3750    0.3750 ...
    0.3750    0.4375    0.3750    0.3750    0.8750    0.3750];
>> mode(sample)
ans =
                 0.375

Если я добавлю небольшие случайные числа, я могу изменить ответ ... но не устанавливать его на ноль.

>> format short g
>> sample = sample .* (1+100*eps*randn(size(sample)))
sample =
  Columns 1 through 11
       0.4375        0.375       0.5313       0.4375        0.875        0.375       0.5313       0.6563        0.375       0.4375       0.5313
  Columns 12 through 22
       0.5313       0.8438       0.8438       0.4375       0.5313       0.5313       0.5313       0.4375        0.375       0.4375        0.375
  Columns 23 through 33
        0.375       0.5313        0.375        0.875       0.5313       0.8438       0.4375       0.0313        0.375       0.8438       0.8438
  Columns 34 through 44
        0.375        0.875        0.875       0.5313       0.4375        0.875       1.7813        0.375        0.875        0.375        0.375
  Columns 45 through 50
        0.375       0.4375        0.375        0.375        0.875        0.375

>> mode(sample)
ans =
       0.0313

Похоже, вы где-то посередине, так как ваш length(unique(sample)) вернул 12. Для справки я получаю

>> length(unique(sample))  %After the initial setup above
ans =
     8


>> length(unique(sample))  %After adding small random perturbations
ans =
    50
0 голосов
/ 03 февраля 2012

Как четко указано в документации MATLAB, «функция режима наиболее полезна для дискретных или грубо округленных данных. Режим для непрерывного распределения вероятностей определяется как пик его функции плотности. Применение функции режима к выборке из этого распределения вряд ли можно получить хорошую оценку пика; было бы лучше рассчитать гистограмму или оценку плотности и рассчитать пик этой оценки ".

Это не объясняет, почему в результате вы получаете 0, но следует предостеречь вас не полагаться на команду mode для данных с плавающей запятой. Интересно, что бы вы получили, если бы вы превратили значения в переменной sample в целые числа и применили команду mode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...