はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
zip (Python)
import numpy as np
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
for a, b in zip(x, y):
print(a, b)
# output
1 4
2 5
3 6
何の変哲もないように思われますが、pythonとnumpyの親密さが伺い知れます。
失敗(Ruby)
require 'numpy'
x = Numpy.array([1, 2, 3])
y = Numpy.array([4, 5, 6])
x.zip(y).each do |a, b|
p [a, b]
end
# output
undefined method `zip' for array([1, 2, 3]):Numpy::NDArray (NoMethodError)
PyCall
経由とはいえエラーになります。
成功(Ruby)
require 'numpy'
x = Numpy.array([1, 2, 3])
y = Numpy.array([4, 5, 6])
x.to_a.zip(y.to_a).each do |a, b|
p [a, b]
end
to_a
を使用して、一旦rubyの配列に変換する必要がありました。
成功(numpy.column_stack)
require 'numpy'
x = Numpy.array([1, 2, 3])
y = Numpy.array([4, 5, 6])
p Numpy.column_stack([x, y])
# output
array([[1, 4],
[2, 5],
[3, 6]])
numpy
のstack関数
を使用して結合することも可能です。
おまけ(Numo-NArray)
numo-narray
require 'numo/narray'
x = Numo::NArray.cast([1, 2, 3])
y = Numo::NArray.cast([4, 5, 6])
x.to_a.zip(y.to_a).each do |a, b|
p [a, b]
end
numo-narray
でも変換が必要の様です。
メモ
- Python の zip を学習した
- 百里を行く者は九十里を半ばとす