Я пытался понять, как выполнить простой расчет энтропии, используя четыре вектора тяги.
У меня есть четыре вектора устройств, представляющие две пары ключ-значение. Первая пара векторов содержит ключи и количество появлений этого ключа. Вторая пара содержит ключи, сопряженные с бинами для вычисления энтропии. В этой второй векторной паре ключи появляются несколько раз, причем каждый экземпляр представляет другой бин.
Это выглядит примерно так:
Пара векторов устройств 1
КейВал 6 8 9
Считает 1 3 2
Пара векторов устройств 2
KeyVal 6 8 8 9 9
БинВал 1 1 2 1 1
Вектор результатов (содержит рассчитанные результаты энтропии)
KeyVal 8
Энтропия 0,602
Что я планирую сделать, так это использовать первую пару векторов, чтобы проверить, появляется ли ключ достаточное количество раз для вычисления энтропии. Если количество достаточно велико, вторая пара векторов будет использоваться для вычисления энтропии со значениями интервала для этого ключа. Мне нужно будет использовать все значения корзины для этого конкретного ключа. Например, если бы я хотел посчитать энтропию для ключей, появившихся не менее 3 раз, я бы нашел в первой паре векторов, что KeyVal 8 готов. Затем я искал во второй паре все экземпляры KeyVal 8 и вычислял энтропию, используя их соответствующие BinVals. Расчет энтропии прост, он просто включает сложение BinVal*Log(BinVal) для каждого соответствующего значения. В моем примере это будет энтропия = 1*log(1) + 2*log(2).
Однако я понятия не имею, как заставить эту часть работать. Я пытался использовать тягу:: for_each, чтобы найти все ключи, которые появляются достаточное количество раз для проверки, но я не думаю, что возможно искать ключи во второй паре векторов и выполнять вычисления в функции for_each.
Есть ли у кого-нибудь предложения о других способах достижения этого?
Спасибо за помощь.
Counts 1 2 2
? Или эти подсчеты не учитывают, как часто ключ встречается во втором вектореKeyVal
? - person m.s.   schedule 02.07.2015