如何扩展/缩小二维Ruby NArray?

时间:2012-03-14 10:40:32

标签: ruby narray

如果我有一个形状为100,10000的Narray,并想将它扩展为100,20000(基本上是添加行),实现这个的正确方法是什么?为了扩展大量的Narrays,我想避免使用临时Narray作为记忆的原因。

1 个答案:

答案 0 :(得分:1)

require "narray"

class NArray
  def expand(*new_shape)
    na = NArray.new(self.typecode,*new_shape)
    range = self.shape.map{|n| 0...n}
    na[*range] = self
    return na
  end
end

p a = NArray.float(2,3).indgen!
# => NArray.float(2,3):
#    [ [ 0.0, 1.0 ],
#      [ 2.0, 3.0 ],
#      [ 4.0, 5.0 ] ]

p a.expand(3,4)
# => NArray.float(3,4):
#    [ [ 0.0, 1.0, 0.0 ],
#      [ 2.0, 3.0, 0.0 ],
#      [ 4.0, 5.0, 0.0 ],
#      [ 0.0, 0.0, 0.0 ] ]

在没有移动的情况下,没有通用的扩展内存块的方法。 只有当有足够的空闲区域时,才能扩展内存块, 但这种情况通常是意料之外的。