Как бороться с парными значениями?
Скажем, у меня есть вектор значений независимых переменных
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
вектор строки