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?
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
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
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