在 Ruby 的 NArray 中对设置位求和的最快方法是什么?

发布于 2024-12-10 01:29:27 字数 663 浏览 0 评论 0原文

我使用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

有想法吗?

干杯,

马丁

I used NArray to implement a bit array, but I am not quite satisfied with the speed of the bits_on method. Currently I have:

# 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 is an NArray.byte() type, and @count_array is build like this:

# 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

Ideas?

Cheers,

Martin

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你在我安 2024-12-17 01:29:27

我不确定我是否正确理解了背景,一个可能的解决方案是:

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

I am not sure I understand the background correctly, a possible solution is:

def bits_on
  NArray.to_na(@count_array)[self.byte_array].sum
end

Sorry, the above is wrong, the next will work:

def bits_on
  index = NArray.int(*self.byte_array.shape)
  index[] = self.byte_array
  NArray.to_na(@count_array)[index].sum
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文