1

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

因此,如果我有两个 NArray:

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

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

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

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

  2. 称呼n1.vcat n2

于 2012-03-15T15:32:17.147 回答
1

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

于 2012-03-15T15:56:03.250 回答
0

您可以使用 << 运算符。它会改变n1。

n1 << n2

如果您不想更改 n1,您可以:

n1.dup << n2
于 2012-03-15T15:34:54.043 回答