корзины разного размера в матлабе

В Matlab у меня есть вектор Muen, размер которого я хочу уменьшить, разделив его на ячейки разной длины. В векторе есть несколько значений, которым нужны ячейки высокой точности, и множество значений, которые примерно равны и могут быть собраны в ячейки размером до нескольких сотен значений. Мне также нужно знать индекс для всех старых бинов, переходящих в новый бин, чтобы сократить вектор fluence сенкода.

Цель состоит в том, чтобы ускорить суммирование двух векторов sum(fluence.*Muen), используя интервалы разного размера, определенные Meun, и выполнить сумма флюенса в новые бины перед векторным умножением. Для этого я пытаюсь использовать

edges=[min(Muen):0.0001:Muen(13),Muen(12:-1:1)); 
[N,bin]=histc(*Muen*,edges) 

Проблема заключается в том, как сделать вектор ребра, так как существует большая разница между максимальным и минимальным значением Muen и небольшая разница между другими значениями. Есть ли способ сделать шаги ребер зависимыми от производной Muen?

Чтобы получить более короткую версию Muen, нужно сделать что-то вроде

MuenShort=N.*edges;  

но это не сработало, выйти правильно (может быть ошибка в краях), есть предложения?

Я также не очень понимаю, как bin дает индекс значений, которые входят в новые ячейки?

уточнение: я хочу сделать из вектора m или Muen взять элементы, которые примерно равны, и заменить их одним элементом и в то же время отслеживать индекс, для которого элемент переходит в новый вектор n или MuenShort. пример {m1}->n1,(1), {m2}->n2,(2), {m3,m4}-> m3=m4=n3,(3,4),{m5,m6,m7,m8 }-> m5=m6=m7=m8=n4,{5,6,7,8}... где n1>>n2, но разница между n3 и n4 может быть не такой большой. число m-элементов в каждом n-элементе должно определяться числом m-элементов, примерно равных друг другу, а точнее лежащих между двумя пределами. Таким образом, размер ячейки должен варьироваться от одного элемента до нескольких сотен элементов.
Затем я хочу использовать индексы, чтобы сделать вектор fluence короче.

FluenceShort (1: длина (MuenShort)) = [сумма (флюенс (1)), сумма (флюенс (2)), сумма (флюенс (3,4)), сумма (флюенс (5,6,7,8)) ...]; цель=сумма(fluenceShort.*MuenShort)

Есть ли способ реализовать это в Matlab?


person user2664748    schedule 08.08.2013    source источник
comment
Пожалуйста, сформулируйте свой вопрос более четко. Вы говорите о бинах и используете histc, поэтому вы, вероятно, хотите вычислить какую-то гистограмму, но никогда не говорите об этом. И Muen отсортировано по убыванию? Поскольку вы, кажется, используете его в обратном порядке, чтобы создать свои края...   -  person Bas Swinckels    schedule 09.08.2013


Ответы (1)


Даже если я не совсем понимаю ваш вопрос, я бы предложил это. Возможно, вы могли бы отсортировать свой вектор muen, выбрать фиксированное число n и определить каждый бин так, чтобы он содержал ровно n значений muen. Для простоты предполагается, что длина muen кратна n:

n = 10;
m = length(muen_sorted)/n; 
muen_sorted = sort(muen);
edges = [-inf mean([muen_sorted(n:n:end-1); muen_sorted(n+1:n:end)]) inf ];
muen_short = mean(reshape(muen_sorted,n,m));

Обратите внимание, что получается m+1 ребер (вектор edges), соответствующих m бинам. Ребра бинов лежат точно между ближайшими значениями соседних бинов. Таким образом, верхний край первого бина равен (muen_sorted(n)+muen_sorted(n+1)/2; верхний край следующего бина равен (muen_sorted(2*n)+muen_sorted(2*n+1)/2 и так далее.

«Репрезентативное значение» каждого бина (вектор muen_short) вычисляется как mean значений, которые лежат в этом бине. Или, возможно, median будет иметь больше смысла, в зависимости от вашего приложения.

В результате этого кода muen_short(1) является значением, соответствующим ячейке с ребрами edge(1) и edge(2); muen_short(2) — это значение, соответствующее бину с ребрами edge(2) и edge(3) и т. д.

Теперь вы можете использовать переменную edges для построения гистограммы fluence с теми же ребрами.

person Luis Mendo    schedule 08.08.2013
comment
Один аспект этой проблемы, который я не совсем понимаю, заключается в том, как вы собираетесь отслеживать, какой элемент оказался в какой корзине, чтобы позже флюенс также правильно группировался. Я полагаю, для этого требуется, чтобы плотность потока была линейной (или, по крайней мере, монотонной) функцией Мюена? - person Buck Thorn; 09.08.2013