如何在二维Ruby NArray中添加行?

时间:2012-03-15 15:22:49

标签: ruby narray

我想在二维NArray中添加一行。 NArray 0-7 Tutorial中描述的方式非常复杂 - 我想知道是否有更简单的方法。

所以如果我有两个NArrays:

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

n2 = [16, 17, 18, 19]

我想添加n1和n2来获取n3:

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

怎么可能这样做?

4 个答案:

答案 0 :(得分: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 ] ]

答案 1 :(得分:1)

看一下你提到的教程中的方式,它实际上非常简单:

  1. 将“堆叠在一起的不同数组”类定义复制到您的代码中(或者创建一个新的.rb,需要使用此定义的NArray;并且需要将新文件放入代码而不是NArray中)

  2. 致电n1.vcat n2

答案 2 :(得分:1)

您也可以使用n3 = n1 + [n2],它适用于您提供的示例。

答案 3 :(得分:0)

您可以使用<<运营商。它会改变n1。

n1 << n2

如果你不想改变n1,你可以:

n1.dup << n2