2012-03-14 28 views
1

私は100,10000の形のNarrayを持っていて、これを展開するには100,20000(基本的に行を追加する)にしたいのですが、これを達成するための適切な方法は何ですか?大規模なNarraysを拡張するために、私は一時的なNarrayをメモリ上の理由で使用しないでください。2次元のRuby NArrayを拡大/縮小するには?

+0

APIで[言及](http://structure.m.u-tokyo.ac.jp/ruby-helix/node5.html#SECTION005111000000000000000)として '.newdim(100,20000)'を試しましたか? –

答えて

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 ] ] 

メモリブロックを移動せずに展開する一般的な方法はありません。 メモリブロックは、空き領域が十分に続く場合にのみ拡張できますが、このような場合は通常予想外です。

+0

ありがとうございました。 NArrayがどのように実装されているのか分かりませんが、限られたC経験では、NArrayを保持するメモリブロックを再配置&サイズ変更することが可能であるはずです。おそらく将来? – maasha

+0

上記の私のコメントはreallocにも当てはまります。大きなサイズを割り当てると、realloc関数は別のポインタを返します。 – masa16

関連する問題