[Numpy-discussion] Matrix to Array Transformation assistance required

josef.pktd at gmail.com josef.pktd at gmail.com
Mon Apr 4 00:04:13 EDT 2011


On Sun, Apr 3, 2011 at 8:03 PM, David Crisp <david.crisp at gmail.com> wrote:
> Hello,
>
> I am trying to convert a numpy matrix to an array containing
> coordinate pairs,  and I am having difficulty understanding the
> transformation process.   I know there is a fairly simply way of doing
> this transformation but am unsure of the commands to use.
>
> The matrix I have is created with the following command
>
> vegetation_matrix = numpy.empty(shape=(x_bins,y_bins))
>
> x_bins and y_bins are dynamic in size depending on the input data and
> the required precision.   Some tests I need to perform could result in
> a 10 by 10 matrix and some could result in a 4000,5000 matrix,
> However,  these values are dynamic and could be anything.  For
> instance they COULD be 300,124 or 400,900 etc.. these are unknown
> values until the data has been collected.
>
> A sample matrix view will be:
>
>>>> a
> array([['x', 'o', 'o'],
>      ['o', 'x', 'x'],
>      ['o', 'x', 'o']],
>     dtype='|S1')
>
> I wish to convert this to:
> 0,0,x
> 0,1,o
> 0,2,o
> ...
> 2,2,o
>
> I have been given the following example which works on a known size of data.
>
>>>> a
> array([['x', 'o', 'o'],
>      ['o', 'x', 'x'],
>      ['o', 'x', 'o']],
>     dtype='|S1')
>
>>>> numoy.array([numpy.arange(9)//3, numpy.arange(9)%3, a.flatten()]).transpose() array([['0', '0', 'x'],
>      ['0', '1', 'o'],
>      ['0', '2', 'o'],
>      ['1', '0', 'o'],
>      ['1', '1', 'x'],
>      ['1', '2', 'x'],
>      ['2', '0', 'o'],
>      ['2', '1', 'x'],
>      ['2', '2', 'o']],
>     dtype='|S8')
>
> But when I try and convert that line to work on my own matrix with its
> larger size,   I do not understand how to make it work.

It looks to me that you just have to replace the 9 and the 3 with your
2d array size and shape, for example

>>> a = np.arange(12).reshape(3,4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> np.column_stack((np.arange(a.size)//a.shape[1], np.arange(a.size)%a.shape[1], a.ravel()))
array([[ 0,  0,  0],
       [ 0,  1,  1],
       [ 0,  2,  2],
       [ 0,  3,  3],
       [ 1,  0,  4],
       [ 1,  1,  5],
       [ 1,  2,  6],
       [ 1,  3,  7],
       [ 2,  0,  8],
       [ 2,  1,  9],
       [ 2,  2, 10],
       [ 2,  3, 11]])

Or do I misunderstand the question?

Josef

>
> Would somebody be able to provide a little assistance on how I can proceed here.
>
> (I am a little new to python and part of the problem I have is using
> the correct terminology for various processes etc)
>
> Regards,
> David
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>



More information about the NumPy-Discussion mailing list