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