Как расширить / уменьшить двумерный Ruby NArray? - PullRequest
1 голос
/ 14 марта 2012

Если у меня есть Narray с формой 100, 10000 и я хочу расширить его до 100, 20000 (в основном, добавить строки), каков правильный способ достижения этого? Для расширения массивных Narrays я бы не хотел использовать временные Narrays по соображениям памяти.

1 Ответ

1 голос
/ 14 марта 2012
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 ] ]

Нет общего способа расширить блок памяти без движения. Блок памяти может быть увеличен только при наличии достаточного свободного пространства, но такой случай обычно бывает неожиданным.

...