Группировка значений вектора

Допустим, у меня есть два вектора:

a    numbers=[14 14 2 25 25 14 14 14 2 23 23 23]:
b    frequency_of_the_numbers_above=[2 1 2 3 1 3];

c    new_numbers=[14 14 14 14 14 2 2 2 2 25 25 25 25 25 25 25 14 14 14 14 14 2 2 2 2 23 23 23 23 ];

b описывает, как часто появляется значение в векторе a. Например: число 14 два раза, поэтому первое число в b равно 2, число 2 в векторе a один раз, поэтому второе число в векторе b равно 1 и т. д.

теперь я хочу адаптировать вектор b к вектору c, чтобы результат выглядел так:

new_numbers[14 14 14 14 14 2 2 2 2 25 25 25 25 25 25 25 14 14 14 14 14 2 2 2 2 23 23 23 23 ];
frequency_numbers_for_new_numbers=[2 2 2 2 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 1 1 1 1 3 3 3 3];

person Hakan Kiyar    schedule 12.03.2012    source источник
comment
ваш вопрос, похоже, не соответствует тому, что вы разместили в векторах. То, что кажется b, - это то, сколько заданного числа появляется в a в ROW. Поскольку есть 5 14s в a. И ваш результат, по-видимому, повторяется, когда число этого элемента в b повторяется для номера этого элемента в c, это то, что вы хотите? Всегда ли a и c содержат одни и те же числа в одном и том же порядке?   -  person twain249    schedule 13.03.2012
comment
Можете ли вы дать своим векторам более описательные имена? Если вы правильно назовете свои объекты, это сделает вопрос более ясным для нас, а также облегчит понимание любого решения.   -  person sgmorrison    schedule 13.03.2012
comment
Нет, у меня есть шаблон в a и b, где первое число b описывает количество тех же значений, что и соседние в a. это означает две 14, одну 2, две 25 и т. д. Теперь я хочу иметь значение 2, которое обозначает 14, точно такое же количество раз, как в c, что означает для 5 14 с пятью двойками в c и т. д. пять 14 в c и т. д. - надеюсь, я смог объясниться ....   -  person Hakan Kiyar    schedule 13.03.2012


Ответы (1)


ваш вопрос, похоже, не соответствует тому, что вы разместили в векторах. То, что кажется b, - это то, сколько заданного числа появляется в a в ROW. Так как в a 5 14s. И ваш результат, по-видимому, повторяется, когда число этого элемента в b повторяется для номера этого элемента в c, это то, что вы хотите? Всегда ли a и c содержат одни и те же числа в одном и том же порядке?

Хорошо, я напишу код, чтобы сделать то, что я описал (на java).

int index = 0;
int currentVal = c[0];
int[] result = new int[c.length];

for(int i = 0; i < result.length; i++)  {
    if(c[i] != currentVal) {
        index++; //if the number changed go to the next index for b
        currentVal = c[i]; //update the currentVal to the new value
    }
    result[i] = b[index]; //copy the value from b into the result vector
}
person twain249    schedule 12.03.2012