Какой самый быстрый способ суммирования битов в NArray в Ruby?
Я использовал NArray для реализации битового массива, но меня не совсем устраивает скорость метода bits_on. В настоящее время у меня есть:
# Method that returns the number of bits set "on" in a bit array.
def bits_on
bits_on = 0
self.byte_array.each do |byte|
bits_on += @count_array[byte]
end
bits_on
end
byte_array
является типом NArray.byte() и @count_array
это построить так:
# Method that returns an array where the element index value is
# the number of bits set for that index value.
def init_count_array
count_array = []
(0 ... (2 ** BitsInChar)).each do |i|
count_array << bits_in_char(i)
end
count_array
end
Идеи?
Ура,
Мартин
1 ответ
Решение
Я не уверен, что правильно понимаю фон, возможное решение:
def bits_on
NArray.to_na(@count_array)[self.byte_array].sum
end
Извините, вышеприведенное неверно, будет работать следующее:
def bits_on
index = NArray.int(*self.byte_array.shape)
index[] = self.byte_array
NArray.to_na(@count_array)[index].sum
end