From: Ralf Mueller Date: 2011-04-29T20:05:16+09:00 Subject: Re: Need for speed - array operations On 04/29/2011 10:54 AM, Chris Lervag wrote: > Hi, > > Im working on a library to decode medical image files, and some of these > files are encoded as 'PALETTE COLOR', which means you have a lookup > table for red, green and blue pixel values. The final RGB pixel array is > constructed by hitting the lookup table with the original pixel values. > In my implementation I am using an iterator, and it is kinda slow. I > cant spot an obvious way to improve on it though, so I thought I'd put > the question out here and see if any of you more experienced Rubyists > can suggest a more efficient way of doing this. > > Thanks, > Chris > > Example code: > # Set up example arrays to test the algorithm: > lookup_values = Array.new > lookup_values<< Array.new(256, 0) > lookup_values<< Array.new(256, 1) > lookup_values<< Array.new(256, 2) > pixels = Array.new(258000, rand(256)) > rgb = Array.new(pixels.length*3) > > # The PALETTE transformation algorithm: > pixels.each_index do |i| > rgb[i*3] = lookup_values[0][pixels[i]] > rgb[(i*3)+1] = lookup_values[1][pixels[i]] > rgb[(i*3)+2] = lookup_values[2][pixels[i]] > end > You might try narray: http://narray.rubyforge.org/. It's available as a gem. ralf