Populate (an array or a matrix) from a vector

P

Paul A.

Hello,

I have a simple, but very tricky, problem. I would like to fix it using
an array. But matix are possibly more appropriate (even if matrix can
not have 3 dimensional values, I think).

I would like to populate a table (of 2 or 3 dimensions), from a vector.

I think the best way to explain myself is to put some examples, with an
array such as:

And now, if the seeder vector is: [1, 0], the result should be:

=> [
=> [4, 3, 2, 1, 0],
=> [4, 3, 2, 1, 0],
=> [4, 3, 2, 1, 0]
=> ]

If the vector is: [-1, 0]

=> [
=> [0, 1, 2, 3, 4],
=> [0, 1, 2, 3, 4],
=> [0, 1, 2, 3, 4]
=> ]

If the vector is: [-2, 0]

=> [
=> [0, 0, 1, 1, 2],
=> [0, 0, 1, 1, 2],
=> [0, 0, 1, 1, 2]
=> ]

If the vector is: [1, 1]

=> [
=> [2, 2, 2, 1, 0],
=> [1, 1, 1, 1, 0],
=> [0, 0, 0, 0, 0]
=> ]

If the vector is: [0, 1]

=> [
=> [2, 2, 2, 2, 2],
=> [1, 1, 1, 1, 1],
=> [0, 0, 0, 0, 0]
=> ]

Have you got a idea, or a plan? :s
Any comments are welcome. Thank you.

Best regards.
 
R

Rolf Pedersen

[Note: parts of this message were removed to make it a legal post.]

Tip: Did you check out the Matrix and Vector classes in the Ruby Standard
Library?
http://ruby-doc.org/core/classes/Matrix.html
http://ruby-doc.org/core/classes/Vector.html

Best regards,
-Rolf

Hello,

I have a simple, but very tricky, problem. I would like to fix it using
an array. But matix are possibly more appropriate (even if matrix can
not have 3 dimensional values, I think).

I would like to populate a table (of 2 or 3 dimensions), from a vector.

I think the best way to explain myself is to put some examples, with an
array such as:

And now, if the seeder vector is: [1, 0], the result should be:

=> [
=> [4, 3, 2, 1, 0],
=> [4, 3, 2, 1, 0],
=> [4, 3, 2, 1, 0]
=> ]

If the vector is: [-1, 0]

=> [
=> [0, 1, 2, 3, 4],
=> [0, 1, 2, 3, 4],
=> [0, 1, 2, 3, 4]
=> ]

If the vector is: [-2, 0]

=> [
=> [0, 0, 1, 1, 2],
=> [0, 0, 1, 1, 2],
=> [0, 0, 1, 1, 2]
=> ]

If the vector is: [1, 1]

=> [
=> [2, 2, 2, 1, 0],
=> [1, 1, 1, 1, 0],
=> [0, 0, 0, 0, 0]
=> ]

If the vector is: [0, 1]

=> [
=> [2, 2, 2, 2, 2],
=> [1, 1, 1, 1, 1],
=> [0, 0, 0, 0, 0]
=> ]

Have you got a idea, or a plan? :s
Any comments are welcome. Thank you.

Best regards.
 
C

Colin Bartlett

... I have a simple, but very tricky, problem. =A0I would like to fix it = using
an array. =A0But matix are possibly more appropriate (even if matrix can
not have 3 dimensional values, I think). ..

I must confess that from your examples, I'm not at all sure how you
want to populate the "array" given the vector, so the following may
not be any help at all. But: if you want multidimensional numerical
arrays, then NArray might be useful.

http://narray.rubyforge.org
NArray is an Numerical N-dimensional Array class. Supported element
types are 1/2/4-byte Integer, single/double-precision Real/Complex,
and Ruby Object. This extension library incorporates fast calculation
and easy manipulation of large numerical arrays into the Ruby
language. NArray has features similar to NumPy, but NArray has vector
and matrix subclasses. ...

I haven't used it much myself, and I haven't used it recently. But I
did manage to install and use it without using gems, so if I can do it
that way it can't be all that difficult to install !
 
M

Masahiro TANAKA

Hi,
And now, if the seeder vector is: [1, 0], the result should be:

=> [
=> [4, 3, 2, 1, 0],
=> [4, 3, 2, 1, 0],
=> [4, 3, 2, 1, 0]
=> ]

I guessed your intention and wrote it using NArray:

require 'narray'

def populate( shape, v )
ndim = shape.size
max = shape.max
a = NArray.int(ndim,*shape)
shape.each_with_index do |sz,i|
if v == 0
a[i,false] = max
else
r = [1]*ndim
r = sz
x = NArray.int(sz).indgen!
x = sz-1-x if v > 0
x /= v.abs
a[i,false] = x.reshape!(*r)
end
end
a.min(0)
end

populate( [5,3], [1,0] )
=> NArray.int(5,3):
[ [ 4, 3, 2, 1, 0 ],
[ 4, 3, 2, 1, 0 ],
[ 4, 3, 2, 1, 0 ] ]

populate( [5,3], [-1,0] )
=> NArray.int(5,3):
[ [ 0, 1, 2, 3, 4 ],
[ 0, 1, 2, 3, 4 ],
[ 0, 1, 2, 3, 4 ] ]

populate( [5,3], [-2,0] )
=> NArray.int(5,3):
[ [ 0, 0, 1, 1, 2 ],
[ 0, 0, 1, 1, 2 ],
[ 0, 0, 1, 1, 2 ] ]

populate( [5,3], [1,1] )
=> NArray.int(5,3):
[ [ 2, 2, 2, 1, 0 ],
[ 1, 1, 1, 1, 0 ],
[ 0, 0, 0, 0, 0 ] ]

populate( [5,3], [0,1] )
=> NArray.int(5,3):
[ [ 2, 2, 2, 2, 2 ],
[ 1, 1, 1, 1, 1 ],
[ 0, 0, 0, 0, 0 ] ]

populate( [5,3,3], [2,1,1] )
=> NArray.int(5,3,3):
[ [ [ 2, 1, 1, 0, 0 ],
[ 1, 1, 1, 0, 0 ],
[ 0, 0, 0, 0, 0 ] ],
[ [ 1, 1, 1, 0, 0 ],
[ 1, 1, 1, 0, 0 ],
[ 0, 0, 0, 0, 0 ] ],
[ [ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ] ] ]

Masahiro Tanaka
 
P

Paul A.

Thank you very much, Masahiro Tanaka! Your response is exactly what I
dreamed of doing. And your numerical n-dimensional array class is
absolutly awesome! I'm glad to continue coding with!

Thanks again.
Best regards.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,043
Latest member
CannalabsCBDReview

Latest Threads

Top