如何在 Ruby 的 NArray 中定位非空值的间隔?

发布于 2024-12-10 13:54:42 字数 240 浏览 2 评论 0原文

我有兴趣将 NArray 中的所有非空间隔定位为 [begin, end] 类型的元组。因此,如果我们有一个给定大小的 NArray 并且索引位置 100 ... 200、300 ... 400 等处的所有值都非零,我想获得这样的数组: [[100,200 ]、[300,400] 等]。我想知道 NArray 接口中是否有一些东西 - 不幸的是它的记录不足 - 可以帮助我?速度当然至关重要。

干杯,

马丁

I am interested in locating all non-empty intervals in a NArray as tuples of [begin, end] type. So if we have a NArray of a given size and all values at index positions 100 ... 200, 300 ... 400, etc are non-zero, I would like to obtain an array like this: [[100,200], [300,400], etc]. I wonder is there is something in the NArray interface - which unfortunately is under-documented - that can help me? Speed is of cause critical.

Cheers,

Martin

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

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

发布评论

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

评论(1

治碍 2024-12-17 13:54:42
$ irb -rnarray
irb> a = NArray[0,1,2,0,0,5,0,7,8,9]
irb> tmp = NArray.new( a.typecode, a.size+2 )
irb> tmp[1..-2] = a
irb> tmp
=> NArray.int(12): 
[ 0, 0, 1, 2, 0, 0, 5, 0, 7, 8, 9, 0 ]

irb> empty = tmp.eq(0)
=> NArray.byte(12): 
[ 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1 ]

irb> beg = (~empty[1..-1] & empty[0..-2]).where
=> NArray.int(3): 
[ 1, 5, 7 ]

irb> fin = (empty[1..-1] & ~empty[0..-2]).where
=> NArray.int(3): 
[ 3, 6, 10 ]

irb> range = NArray[beg,fin].transpose(1,0)
=> NArray.int(2,3): 
[ [ 1, 3 ], 
  [ 5, 6 ], 
  [ 7, 10 ] ]
$ irb -rnarray
irb> a = NArray[0,1,2,0,0,5,0,7,8,9]
irb> tmp = NArray.new( a.typecode, a.size+2 )
irb> tmp[1..-2] = a
irb> tmp
=> NArray.int(12): 
[ 0, 0, 1, 2, 0, 0, 5, 0, 7, 8, 9, 0 ]

irb> empty = tmp.eq(0)
=> NArray.byte(12): 
[ 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1 ]

irb> beg = (~empty[1..-1] & empty[0..-2]).where
=> NArray.int(3): 
[ 1, 5, 7 ]

irb> fin = (empty[1..-1] & ~empty[0..-2]).where
=> NArray.int(3): 
[ 3, 6, 10 ]

irb> range = NArray[beg,fin].transpose(1,0)
=> NArray.int(2,3): 
[ [ 1, 3 ], 
  [ 5, 6 ], 
  [ 7, 10 ] ]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文