1

2次元のNArrayに行を追加したいと思います。NArray 0-7チュートリアルで説明されている方法はかなり複雑ですが、もっと簡単な方法があるのではないかと思います。

したがって、2つのNArrayがある場合:

n1 = [[ 0,  1,  2,  3],
      [ 4,  5,  6,  7],
      [ 8,  9, 10, 11],
      [12, 13, 14, 15]]

n2 = [16, 17, 18, 19]

n3を取得するためにn1とn2を追加したいと思います。

n3 = [[ 0,  1,  2,  3],
      [ 4,  5,  6,  7],
      [ 8,  9, 10, 11],
      [12, 13, 14, 15],
      [16, 17, 18, 19]]

これはどのように行うことができますか?

4

4 に答える 4

2
require "narray"

class NArray
  def concat(other)
    shp = self.shape
    shp[1] += 1
    a = NArray.new(self.typecode,*shp)
    a[true,0...-1] = self
    a[true,-1] = other
    return a
  end
end

n1 = NArray[[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11],
            [12, 13, 14, 15]]

n2 = NArray[16, 17, 18, 19]

p n1.concat(n2)
# => NArray.int(4,5):
#    [ [ 0, 1, 2, 3 ],
#      [ 4, 5, 6, 7 ],
#      [ 8, 9, 10, 11 ],
#      [ 12, 13, 14, 15 ],
#      [ 16, 17, 18, 19 ] ]
于 2012-03-16T04:13:35.060 に答える
1

を使用することもできますn3 = n1 + [n2]。これは、指定した例で機能します。

于 2012-03-15T15:56:03.250 に答える
1

あなたが言及したチュートリアルの方法を見ると、実際には非常に簡単です:

  1. 「Stacking together different arrays」クラス定義をコードにコピーします (または、この定義で NArray を必要とする新しい .rb を作成し、NArray の代わりにコードに新しいファイルを必要とします)。

  2. 電話n1.vcat n2

于 2012-03-15T15:32:17.147 に答える
0

<< 演算子を使用できます。n1 を変更します。

n1 << n2

n1 を変更したくない場合は、次のことができます。

n1.dup << n2
于 2012-03-15T15:34:54.043 に答える