Как добавить строку в двумерный Ruby 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 ответа
Решение
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 ] ]
Вы также можете использовать n3 = n1 + [n2]
, это работает с примером, который вы дали.
Если посмотреть на то, как вы упоминаете туториал, то на самом деле все очень просто:
Скопируйте определение класса "Объединение разных массивов" в свой код (или создайте новый.rb, требующий NArray с этим определением; и потребуйте новый файл в свой код вместо NArray)
вызов
n1.vcat n2
Вы можете использовать оператор <<. Это изменит n1.
n1 << n2
Если вы не хотите менять n1, вы можете:
n1.dup << n2