2012-03-15 39 views
1

我想添加一行到二維NArray。 NArray 0-7 Tutorial中描述的方式非常複雜 - 我想知道是否有更簡單的方法。如何將行添加到二維Ruby NArray?

所以,如果我有兩個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]] 

怎麼可以這樣做?

回答

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. 複製類的定義「不同的陣列堆疊在一起」到你的代碼(或作出新的.rb需要NArray與這個定義,並要求新的文件到您的代碼,而不是NArray)

  2. 呼叫n1.vcat n2

+0

不知道你爲什麼選擇masa的方法def在教程中的一個。 – Arth 2012-03-16 16:00:17

0

您可以使用< <運營商。它會改變n1。

n1 << n2 

如果你想鴕鳥政策N1被改變,你可以:

n1.dup << n2 
1

您還可以使用n3 = n1 + [n2],它與你給的例子。