Aero
Aero

Reputation: 311

Python numpy: reshape list into repeating 2D array

I'm new to python and I have a question about numpy.reshape. I currently have 2 lists of values like this:

x = [0,1,2,3]
y = [4,5,6,7]

And I want them to be in separate 2D arrays, where each item is repeated for the length of the original lists, like this:

xx = [[0,0,0,0]
     [1,1,1,1]
     [2,2,2,2]
     [3,3,3,3]]

yy = [[4,5,6,7]
      [4,5,6,7]
      [4,5,6,7]
      [4,5,6,7]]

Is there a way to do this with numpy.reshape, or is there a better method I could use? I would very much appreciate a detailed explanation. Thanks!

Upvotes: 3

Views: 423

Answers (1)

tmdavison
tmdavison

Reputation: 69164

numpy.meshgrid will do this for you.

N.B. From your requested output, it looks like you want ij indexing, not the default xy

from numpy import meshgrid

x = [0,1,2,3]
y = [4,5,6,7]
xx,yy=meshgrid(x,y,indexing='ij')

print xx
>>> [[0 0 0 0]
     [1 1 1 1]
     [2 2 2 2]
     [3 3 3 3]]

print yy
>>> [[4 5 6 7]
     [4 5 6 7]
     [4 5 6 7]
     [4 5 6 7]]

For reference, here's xy indexing

xx,yy=meshgrid(x,y,indexing='xy')

print xx
>>> [[0 1 2 3]
     [0 1 2 3]
     [0 1 2 3]
     [0 1 2 3]]

print yy
>>> [[4 4 4 4]
     [5 5 5 5]
     [6 6 6 6]
     [7 7 7 7]]

Upvotes: 4

Related Questions