On Wed, Aug 31, 2016 at 4:00 PM, Florian Lindner <mailinglists@xgm.de> wrote:
>
> Hello,
>
> I have mesh (more exactly: just a bunch of nodes) description with values associated to the nodes in a file, e.g. for a
> 3x3 mesh:
>
> 0 0 10
> 0 0.3 11
> 0 0.6 12
> 0.3 0 20
> 0.3 0.3 21
> 0.3 0.6 22
> 0.6 0 30
> 0.6 0.3 31
> 0.6 0.6 32
>
> What is best way to read it in and get data structures like the ones I get from np.meshgrid?
>
> Of course, I know about np.loadtxt, but I'm having trouble getting the resulting arrays (x, y, values) in the right form
> and to retain association to the values.
For this particular case (known shape and ordering), this is what I would do. Maybe throw in a .T or three depending on exactly how you want them to be laid out.
[~/scratch]
|1> !cat mesh.txt
0 0 10
0 0.3 11
0 0.6 12
0.3 0 20
0.3 0.3 21
0.3 0.6 22
0.6 0 30
0.6 0.3 31
0.6 0.6 32
[~/scratch]
|2> nodes = np.loadtxt('mesh.txt')
[~/scratch]
|3> nodes
array([[ 0. , 0. , 10. ],
[ 0. , 0.3, 11. ],
[ 0. , 0.6, 12. ],
[ 0.3, 0. , 20. ],
[ 0.3, 0.3, 21. ],
[ 0.3, 0.6, 22. ],
[ 0.6, 0. , 30. ],
[ 0.6, 0.3, 31. ],
[ 0.6, 0.6, 32. ]])
[~/scratch]
|4> reshaped = nodes.reshape((3, 3, -1))
[~/scratch]
|5> reshaped
array([[[ 0. , 0. , 10. ],
[ 0. , 0.3, 11. ],
[ 0. , 0.6, 12. ]],
[[ 0.3, 0. , 20. ],
[ 0.3, 0.3, 21. ],
[ 0.3, 0.6, 22. ]],
[[ 0.6, 0. , 30. ],
[ 0.6, 0.3, 31. ],
[ 0.6, 0.6, 32. ]]])
[~/scratch]
|7> x = reshaped[..., 0]
[~/scratch]
|8> y = reshaped[..., 1]
[~/scratch]
|9> values = reshaped[..., 2]
[~/scratch]
|10> x
array([[ 0. , 0. , 0. ],
[ 0.3, 0.3, 0.3],
[ 0.6, 0.6, 0.6]])
[~/scratch]
|11> y
array([[ 0. , 0.3, 0.6],
[ 0. , 0.3, 0.6],
[ 0. , 0.3, 0.6]])
[~/scratch]
|12> values
array([[ 10., 11., 12.],
[ 20., 21., 22.],
[ 30., 31., 32.]])
--
Robert Kern