Cree una matriz bidimensional con dos matrices unidimensionales

2 minutos de lectura

Avatar de usuario de Am1rr3zA
Am1rr3zA

Mi función (nombre CovexHull(punto)) acepta el argumento como una matriz bidimensional:

hull = ConvexHull(points)

Sesión

In [1]: points.ndim
Out[1]: 2
In [2]: points.shape
Out[2]: (10, 2)
In [3]: points
Out[3]:
array([[ 0. ,  0. ],
       [ 1. ,  0.8],
       [ 0.9,  0.8],
       [ 0.9,  0.7],
       [ 0.9,  0.6],
       [ 0.8,  0.5],
       [ 0.8,  0.5],
       [ 0.7,  0.5],
       [ 0.1,  0. ],
       [ 0. ,  0. ]])

puntos es una matriz NumPy con ndim 2.

Tengo dos matrices NumPy diferentes (tp y fp) como a continuación:

In [4]: fp.ndim
Out[4]: 1
In [5]: fp.shape
Out[5]: (10,)
In [6]: fp
Out[6]:
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.4,
        0.5, 0.6,  0.9,  1. ])

¿Cómo puedo crear una matriz NumPy bidimensional de manera efectiva (como puntos mencionado anteriormente) con tp y fp?

avatar de usuario de ijmarshall
ijmarshall

Si desea combinar dos matrices unidimensionales de 10 elementos en una matriz bidimensional, np.vstack((tp, fp)).T lo haré.

np.vstack((tp, fp)) devolverá una matriz de forma (2, 10), y el T El atributo devuelve la matriz transpuesta con forma (10, 2) (es decir, con las dos matrices unidimensionales formando columnas en lugar de filas).

>>> tp = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> tp.ndim
1
>>> tp.shape
(10,)

>>> fp = np.array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
>>> fp.ndim
1
>>> fp.shape
(10,)

>>> combined = np.vstack((tp, fp)).T
>>> combined
array([[ 0, 10],
       [ 1, 11],
       [ 2, 12],
       [ 3, 13],
       [ 4, 14],
       [ 5, 15],
       [ 6, 16],
       [ 7, 17],
       [ 8, 18],
       [ 9, 19]])

>>> combined.ndim
2
>>> combined.shape
(10, 2)

  • +1, pero puedes obtener la forma correcta directamente con np.column_stack.

    – Jaime

    17/07/2013 a las 22:25

  • Esta no debería ser la respuesta aceptada. column_stack es mucho más sencillo (ver la respuesta de Aminu)

    – Daniel C Jacobs

    16 dic 2021 a las 19:54

Avatar de usuario de Aminu Kano
Aminu Kano

Puedes usar NumPy columna_pila:

np.column_stack((tp, fp))

  • Esto funcionó, la respuesta aceptada es menos transparente.

    -Eric

    13 mayo 2021 a las 15:46

  • Esta es la manera correcta. Me sorprende que esta no sea la primera respuesta que aparece cuando se busca en Google.

    – Leonardo

    5 de julio de 2021 a las 3:03

Avatar de usuario de Keiku
Keikú

Otra forma es usar np.transpose. Parece que se usa ocasionalmente, pero no es legible, por lo que es una buena idea usar la respuesta de ijmarshall.

import numpy as np

tp = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
fp = np.array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
combined = np.transpose((tp, fp))
combined
# Out[3]:
# array([[ 0, 10],
#        [ 1, 11],
#        [ 2, 12],
#        [ 3, 13],
#        [ 4, 14],
#        [ 5, 15],
#        [ 6, 16],
#        [ 7, 17],
#        [ 8, 18],
#        [ 9, 19]])
combined.ndim
# Out[4]: 2
combined.shape
# Out[5]: (10, 2)

  • Incluso esto es mejor que la respuesta aceptada. vstack no es útil para el objetivo de OP.

    – Daniel C Jacobs

    16 dic 2021 a las 19:58

¿Ha sido útil esta solución?