¿Cómo programar gráficos matemáticos con python? ¿Hay algún paquete que los incluya?

Estoy seguro de que hay bibliotecas de terceros disponibles para gráficos en python. NetworkX viene a la mente. Yo personalmente sugiero los gráficos de implementación de OP al menos una vez como ejercicio. También sugiero implementar algunos métodos comunes como el algoritmo de Dijkstra, la búsqueda de profundidad primero, la búsqueda de amplitud primero y la clasificación topológica.

¿Cuáles son los métodos para hacerlo? Primero debe decidir cómo representar la gráfica. Hay dos formas comunes:

Lista de adyacencia

Para este gráfico, tendríamos un conjunto de listas vinculadas para cada vértice, indicando los otros nodos a los que está conectado.

A B C}

B: {A, C}

TAXI}

Matriz de adyacencia

Para el mismo gráfico, ahora tenemos una matriz bidimensional de entradas [math] V ^ {2} [/ math], donde cada entrada es un valor booleano que indica si un nodo está conectado a otro.

{{0, 1, 1},

{1, 0, 1},

{1, 1, 0}}

Puede pensar que las listas de adyacencia siempre son mejores, pero eso depende en gran medida del tipo de gráfico. Los gráficos densos son cuando la mayoría de los nodos están conectados entre sí. Los gráficos dispersos son lo opuesto, cuando la mayoría de los nodos no tienen conexiones con otros. Para gráficos dispersos, las listas de adyacencia superan en gran medida a las matrices de adyacencia, pero las matrices son las ganadoras de los gráficos densos. El problema principal es la complejidad del espacio frente a la complejidad del tiempo para acceder a los miembros. En una lista de adyacencia, averiguar si el nodo A está conectado a cualquier otro nodo es [matemático] O (grado (A)) [/ matemático] tiempo. Es el tiempo [matemático] O (1) [/ matemático] para una matriz de adyacencia. Sin embargo, las listas de adyacencia tienen un uso de espacio considerablemente menor. Para más discusión sobre esto, visite la página de wikipedia. Lista de adyacencia

Graphs en Python proporciona una buena implementación usando un diccionario, pero sugiero probar una de las dos opciones anteriores por su cuenta para obtener una mejor comprensión. Los gráficos son muy fáciles de implementar, pero la elección de la construcción depende de las necesidades del usuario.

Lo bueno de los gráficos es que, independientemente de la implementación, los métodos importantes casi siempre tienen el mismo aspecto. Los gráficos básicos en python son realmente una traducción línea por línea del pseudocódigo. Aquí hay un ejemplo con la búsqueda de profundidad primero:

Pseudocódigo:

procedimiento DFS-iterativo (G, v):
deja que S sea una pila
S.push (v)
mientras que S no está vacío
v = S.pop ()
si v no está etiquetado como descubierto:
etiqueta v como descubierta
para todos los bordes de v a w en G.ad adyacentesEdges (v) do
S.push (w)

Cosa real:

def dfs (gráfico, inicio):
visitado, stack = set (), [inicio]
mientras que la pila:
vértice = stack.pop ()
si el vértice no está en visitado:
visitado.add (vértice)
stack.extend (gráfico [vértice] – visitado)
volver visitado
# crédito a: http://eddmann.com/posts/depth-first-search-and-breadth-first-search-in-python/

Ahora haga esto con la implementación gráfica real, luego pase a paquetes como NetworkX.

Los gráficos matemáticos lamentablemente tienen dos significados diferentes.

  1. Gráficos con coordenadas cartesianas (x, y y quizás otro eje)
  2. Gráficos como en la teoría de gráficos con vértices y aristas.

Supongo que estás hablando de la primera posibilidad.

Hay varios paquetes diferentes que permiten muchas habilidades matemáticas en python, que eventualmente rivalizan con MATLAB. Si solo quieres un poco de funcionalidad, quizás quieras probar

  1. Ciencia y / o
  2. NumPy con
  3. MatPlotLib

Por otro lado, hacer que todas las bibliotecas funcionen correctamente a menudo no es fácil para los principiantes.

Si desea un sistema integrado completo que esté listo para funcionar, para hacer cualquier tipo de matemática / gráficos, puede intentar cualquiera de los siguientes. Son sistemas integrados completos con documentación razonable e incluyen los paquetes anteriores y muchas docenas más, que ofrecen un entorno para la computación matemática / científica.

  1. Sabio
  2. pitón (x, y)
  3. Distribución de Python de Enthought (Comercial, con versión gratuita limitada)

Como se ha aclarado que la pregunta realmente era sobre el segundo tipo de gráfico, agregaré algunas posibilidades para eso.

  1. NetworkX
  2. igraph
  3. Python-graph
  4. herramienta gráfica
  5. Biblioteca de gráficos BGL BOOST para Python

Creo que cualquiera de los dos primeros debería ser satisfactorio. Ambos son rápidos, pueden manejar gráficos grandes. Ambos están en desarrollo activo. Probablemente el primero tiene mejor documentación.

More Interesting

¿Qué temas o campos en el aprendizaje automático o la minería de datos requieren matemáticas de alto nivel?

¿Cuáles son los problemas que no podemos resolver debido a los límites de la computación?

¿Cuál sería la forma más eficiente de verificar si un número dado es un factorial de algún número o no?

¿Cuántos arreglos de piezas de ajedrez en un tablero de ajedrez hay, suponiendo que las piezas lleguen a sus posiciones mediante movimientos legales?

¿Hay algún problema que requiera más tiempo exponencial de resolución (por ejemplo, doble exp.) Pero que pueda verificarse en tiempo polinómico determinista?

¿Cuál es la diferencia entre notación matemática y notación de programación? ¿Por qué usar uno sobre el otro? ¿Por qué no solo usar siempre la programación?

¿Los humanos alguna vez entenderán verdadera y completamente el Universo?

¿Cuáles son las aplicaciones prácticas de las colas con doble terminación?

¿Quién es el Alan Turing de nuestro tiempo?

¿Qué haría como programador (específicamente un ingeniero de software) que implicaría un conocimiento matemático sólido?

¿Cuáles son los mejores libros de matemáticas gratuitos para graduados de CS?

Si quiero estar en análisis predictivo y no soy experto en matemáticas ni en programación, ¿cuál debo comenzar a perfeccionar primero y por qué?

¿Qué problemas matemáticos se pueden hacer con las computadoras? ¿Cómo?

¿Es elusiva la comprensión fundamental del aprendizaje automático? ¿Requiere habilidad matemática innata?

¿Qué tipo de matemáticas usan los programadores de computadoras?