Tengo dos matrices de 20x100x3 NumPy que quiero combinar en una matriz de 40 x 100 x 3, es decir, simplemente agregue más líneas a la matriz. Estoy confundido por la función que quiero: ¿es vstack, hstack, column_stack o tal vez algo más?Combinación de matrices de NumPy
Respuesta
Creo que es vstack desea
p=array_2
q=array_2
p=numpy.vstack([p,q])
Una de las mejores formas de aprender está experimentando, pero yo diría que desea np.vstack
aunque hay otras maneras de hacer la misma cosa:
a = np.ones((20,100,3))
b = np.vstack((a,a))
print b.shape # (40,100,3)
o
b = np.concatenate((a,a),axis=0)
EDITAR
Así como una nota, en mi máquina para las matrices de tamaño en cuestión de la OP, considero que np.concatenate
es de aproximadamente 2 veces más rápido que np.vstack
In [172]: a = np.random.normal(size=(20,100,3))
In [173]: c = np.random.normal(size=(20,100,3))
In [174]: %timeit b = np.concatenate((a,c),axis=0)
100000 loops, best of 3: 13.3 us per loop
In [175]: %timeit b = np.vstack((a,c))
10000 loops, best of 3: 26.1 us per loop
extraño, pero gracias y ahora puedo dejar mi primer comentario. – Giltech
Puedo ser, ser estúpido aquí, ya que no he usado mucho tiempo, pero ¿no se concatenan 10x tantos bucles? – Giltech
@Giltech, mientras timeit usa 10x más bucles para comparar 'np.concatenate' (parece elegir esto automáticamente), el número importante aquí es el tiempo por ciclo – JoshAdel
Podría valer la pena mencionar que
np.concatenate((a1, a2, ...), axis=0)
es la forma general y vstack y hstack son casos específicos. Me resulta más fácil saber qué dimensión quiero apilar y proporcionar eso como argumento para np.concatenate.
Por cierto, también hay r_
:
>>> from scipy import *
>>> a = rand(20,100,3)
>>> b = rand(20,100,3)
>>> a.shape
(20, 100, 3)
>>> b.shape
(20, 100, 3)
>>> r_[a,b].shape
(40, 100, 3)
>>> (r_[a,b] == vstack([a,b])).all()
True
probé un poco de referencia entre r_ y vstack y el resultado es muy interesante:
import numpy as np
NCOLS = 10
NROWS = 2
NMATRICES = 10000
def mergeR(matrices):
result = np.zeros([0, NCOLS])
for m in matrices:
result = np.r_[ result, m]
def mergeVstack(matrices):
result = np.vstack(matrices)
def main():
matrices = tuple(np.random.random([NROWS, NCOLS]) for i in xrange(NMATRICES))
mergeR(matrices)
mergeVstack(matrices)
return 0
if __name__ == '__main__':
main()
Entonces me encontré con perfilador:
python -m cProfile -s cumulative np_merge_benchmark.py
y los resultados:
ncalls tottime percall cumtime percall filename:lineno(function)
...
1 0.579 0.579 4.139 4.139 np_merge_benchmark.py:21(mergeR)
...
1 0.000 0.000 0.054 0.054 np_merge_benchmark.py:27(mergeVstack)
Así que ¡la manera de la vstack es 77 veces más rápida!
- 1. numpy - 2d indexación de matrices
- 2. uniendo dos matrices numpy
- 3. En lugar de combinación de dos matrices
- 4. problema de asignación de matrices numpy
- 5. Funciones de mapeo de matrices numpy 2D
- 6. Distancia entre matrices numpy, columna
- 7. numpy: ndenumerate para matrices enmascaradas?
- 8. Numpy, problema con matrices largas
- 9. Multiplica varias matrices en numpy
- 10. Generando Matrices Simétricas en Numpy
- 11. Combinación de matrices/manipulación con Velocity
- 12. Combinación de dos matrices en Ruby
- 13. La combinación de matrices en Scala
- 14. ¿Combinación de rangos superpuestos en matrices PHP?
- 15. Combinación de matrices JSON con jQuery
- 16. matrices de rebanado en numpy/SciPy
- 17. Confusión de índice en matrices numpy
- 18. ¿Cómo creo matrices de caracteres en numpy?
- 19. NumPy: Comparación de elementos en dos matrices
- 20. matrices de estilo NumPy para C++?
- 21. Matrices muy grandes usando Python y NumPy
- 22. Indexación con matrices enmascaradas en numpy
- 23. ¿Ventana giratoria para matrices 1D en Numpy?
- 24. Comparando dos matrices numpy entre sí
- 25. matrices por columnas crecientes en NumPy
- 26. ¿Cómo puedo "ordenar zip" matrices numpy paralelas?
- 27. comparando matrices numpy que contienen NaN
- 28. ¿Las matrices numpy se pasan por referencia?
- 29. Escribir múltiples matrices numpy en el archivo
- 30. Manera pitónica de crear una matriz numpy a partir de una lista de matrices numpy
no estoy seguro de por qué tu respuesta no apareció cuando visité por primera vez la página. +1 para sugerir vstack primero. – JoshAdel
Tenga en cuenta que la documentación sugiere utilizar 'stack' o' concatenar' hoy en día y que vstack solo es compatible con compatibilidad retroactiva, consulte: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/ numpy.vstack.html – NOhs