PyCallの作者さんのGemがあった。
https://github.com/mrkn/ruby-mnist
images = Mnist.load_images('train-images-idx3-ubyte.gz')[2].size # => 60000
labels = Mnist.load_labels('train-labels-idx1-ubyte.gz').size # => 60000
pixels = images[0].unpack('C*')
pixels.size # => 784
labels[0] # => 5
pixels.map { |p| p > 100 ? '*' : ' ' }.each_slice(28).map { |a| a.join('') }.join("\n")
*** ****
************
**********
**********
***** *
**
***
**
****
****
****
***
***
*****
*******
*******
******
*******
********
*******
という感じで使える。
unpack
、苦手意識ある。
文字列のバイト列を引数formatの書式に従って分解し、配列を返します。文字列をバイナリデータとして扱うときに使います。
わかりやすい。