Как бороться с парными значениями?

Скажем, у меня есть вектор значений независимых переменных

v =[ 1 2 2 1 1 .5 1 2 .5 .5 1]

и вектор переменных ответа

u = [ 5 22 20 4 8 .2 5 12 0 .5 6]

Я хочу построить u против v с ошибками, метод должен работать в течение 100 с возможных значений для независимой переменной. Проблема не в построении полос ошибок, а в том, как я могу создать векторную пару [mean(u(find(v==0.5)), mean(u(find(v==1)), mean(u(find(v==2))], Существует ли стандартный автоматизированный способ сделать это, кроме сортировки v, а затем выбирая значения отсортированы v и найти индекс v где v соответствует этим значениям? Это кажется очень неэффективным.

1 ответ

Решение

Это может быть то, что вам нужно, если вы хотите получить средства для каждого уникального значения v в том порядке, в котором уникальные значения появляются в v:

>> [unv,iunv,iv] = unique(v);
>> umeans = accumarray(iv(:),u,[],@mean);
>> [~,ivorder] = sort(iunv);
>> umeans = umeans(ivorder)

umeans =

    5.6000
   18.0000
    0.2333

Если вы хотите, чтобы средства в порядке отсортированных значений v, тогда просто используйте вывод accumarray без переупорядочивания команд:

>> [unv,iunv,iv] = unique(v);
>> umeans = accumarray(iv(:),u,[],@mean)

umeans =

    0.2333
    5.6000
   18.0000

Просто убедитесь, что u вектор строки

Другие вопросы по тегам