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

如何扩展/缩减二维Ruby NArray?,ruby,narray,Ruby,Narray,如果我有一个形状为100,10000的Narray,并希望将其扩展为100,20000(基本上是添加行),那么实现这一点的正确方法是什么?为了扩展大量Narray,出于内存原因,我希望避免使用临时Narray require "narray" class NArray def expand(*new_shape) na = NArray.new(self.typecode,*new_shape) range = self.shape.map{|n| 0...n} n

如果我有一个形状为100,10000的Narray,并希望将其扩展为100,20000(基本上是添加行),那么实现这一点的正确方法是什么?为了扩展大量Narray,出于内存原因,我希望避免使用临时Narray

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 ] ]
没有通用的方法可以在不移动的情况下扩展内存块。 只有在有足够的空闲区域后,内存块才能扩展, 但这种情况通常是出乎意料的

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

您是否尝试过API中的
.newdim(10020000)
呢?您是否尝试过API中的
.newdim(10020000)
呢?谢谢masa。我不知道NArray是如何实现的,但我有限的C经验告诉我,应该可以重新定位和调整容纳NArray的内存块的大小。也许在将来?我上面的评论对realloc来说是正确的。当分配较大的大小时,realloc函数将返回不同的指针。谢谢masa。我不知道NArray是如何实现的,但我有限的C经验告诉我,应该可以重新定位和调整容纳NArray的内存块的大小。也许在将来?我上面的评论对realloc来说是正确的。分配较大的大小时,realloc函数将返回不同的指针。