Más

Matriz de distancia QGIS: distancia métrica incorrecta

Matriz de distancia QGIS: distancia métrica incorrecta


Utilicé la herramienta de matriz de distancia lineal en QGIS 2.6 Mi sistema de coordinación es métrico (RD nacional holandés nuevo) Los resultados tienen los decimales incorrectos, como se muestra a continuación. ¿Cómo puedo arreglar esto? (mostrando solo distancias únicas)

InputID TargetID Distancia por matriz distancia real 3 2914.753.872.032 914 metros 3 1119.476.303.875 1,19 km 4 1156.770.528.678 1,56 km 4 3162.709.997.483 1,62 km 4 2226.796.645.372 2,26 km 6 5 241.698.218.226 2,41 km 6 3614.677.367.185 6,14 km 6 4631.106.480.203 6,31 km 6 2693.828.353.563 6,93 km 6 1 723.724.716.201 7,23 km 2 1 105.868.974.731 1,05 km 5 3 38.004.119.442 3,8 km 5 4390.398.472.686 3,9 km 5 2 46.440.219.167 4,64 km 5 1484.470.336.769 484 metros

No sabía que Holanda es uno de los países que también usa números arábigos con coma decimal (http://en.wikipedia.org/wiki/Decimal_mark). Por esta razón, parece un problema de configuración regional. En España (que también usa coma decimal), para evitar problemas de configuración regional, uso mi QGIS con el idioma inglés de EE. UU. Y "Anular configuración regional del sistema" (Configuración-> Opciones-> Configuración regional).

Para probar el funcionamiento correcto de la "herramienta de matriz de distancia" en mi sistema, cargué una capa vectorial de puntos en QGIS y ejecuté la herramienta.

Imprimí mi matriz de distancia como archivo csv donde seleccioné el primer registro para fines de verificación (en rojo):

En la siguiente imagen, seleccioné los puntos con id 0-4 y medí su distancia con "Medir línea herramienta". El resultado fue comparable al del archivo csv.


¿Abriste el csv con un editor de texto o con Excel? Excel se confunde con las comas delimitadoras, los mil puntos y las comas decimales; dependiendo de la configuración regional de su computadora.

Si reemplaza la coma delimitadora por punto y coma, debería funcionar. Un buen editor de texto como notepad ++ para Windows puede hacer esto fácilmente.


QGIS para el aprendizaje a distancia y la enseñanza de SIG en universidades¶

La Universidad del Sur de Queensland (USQ) es una universidad regional ubicada en el sureste de Queensland, Australia. Tiene 28.000 estudiantes que estudian tanto dentro como fuera del campus. El acceso de los estudiantes fuera del campus a tecnologías modernas como los servicios de Internet varía ampliamente. También utilizan diferentes tipos de computadoras (por ejemplo, portátiles, de escritorio, etc.) con diferentes sistemas operativos (por ejemplo, Windows, MacOS y Linux).

Proporcionar educación tanto dentro como fuera del campus tiene muchos desafíos tecnológicos. La enseñanza de un curso de SIG requiere superar estos desafíos. En promedio, entre 300 y 350 estudiantes se inscriben en el curso básico de SIG cada año. Alrededor del 80% de ellos estudian fuera del campus.

Mapa del campus principal de la USQ creado con QGIS ¶


Un algoritmo de cálculo de matriz de distancia mejorado para clústeres multinúcleo

La matriz de distancia tiene un uso diverso en diferentes áreas de investigación. Su cálculo suele ser una tarea esencial en la mayoría de las aplicaciones bioinformáticas, especialmente en la alineación de múltiples secuencias. La gigantesca explosión de bases de datos de secuencias biológicas conduce a una necesidad urgente de acelerar estos cálculos. DistVect El algoritmo se introdujo en el artículo de Al-Neama et al. (en prensa) para presentar un enfoque reciente para vectorizar la computación matricial de distancia. Mostró un rendimiento eficiente tanto en computación secuencial como en paralelo. Sin embargo, los sistemas de clúster multinúcleo, que están disponibles ahora, con su escalabilidad y relación rendimiento / costo, satisfacen la necesidad de un rendimiento más potente y eficiente. Este trabajo propone DistVect1 como algoritmo vectorizado en paralelo de alta eficiencia y alto rendimiento para el cálculo de matrices de distancias, dirigido a clústeres multinúcleo. Reformula DistVect1 algoritmo vectorizado en términos de primitivas de clústeres. Deduce un enfoque eficiente de partición y programación de cálculos, conveniente para este tipo de arquitectura. Las implementaciones emplean el potencial de las bibliotecas MPI y OpenMP. Los resultados experimentales muestran que el método propuesto realiza una mejora de alrededor de 3 veces la aceleración en SSE2. Además, también logra aceleraciones de más de 9 órdenes de magnitud en comparación con la implementación paralela disponible públicamente utilizada en ClustalW-MPI.

1. Introducción

La matriz de distancia (DM) se refiere a una matriz bidimensional que contiene las distancias por pares de un conjunto de elementos. DM tiene una amplia gama de uso en varios campos de investigación científica. Se utiliza de forma intensiva en agrupación de datos [1], reconocimiento de patrones [2], análisis de imágenes [3], recuperación de información [4] y bioinformática. En bioinformática, se utiliza principalmente en la construcción del llamado árbol filogenético, que es un diagrama que describe las líneas de ascendencia evolutiva de diferentes especies, organismos o genes de un ancestro común [5].

El crecimiento explosivo de los genomas hace que la capacidad de alinear una gran cantidad de secuencias largas se vuelva más esencial. Por ejemplo, Ribosomal Database Project Release 10 [6] consta de más de un millón de secuencias. Esto conduce a un gran número de cálculos de distancia. Como, simplemente para alinear 100,000 secuencias, se necesitan calcular aproximadamente 5 mil millones de distancias para construir una DM completa. Incluso si las secuencias son cortas y los cálculos de distancia por pares se pueden hacer con relativa rapidez, digamos a una velocidad de

., su alineación todavía requiere casi 12 días de tiempo de CPU. Otra dificultad es cómo almacenar los elementos DM, ya que ocupará hasta 40 GB de memoria. Esto lleva a la necesidad de nuevos enfoques para acelerar los cálculos de distancia y manejar el almacenamiento de manera eficiente.

Por otro lado, el rápido desarrollo del hardware de computación de alto rendimiento (HPC) proporciona una capacidad computacional de alta relación costo-rendimiento. Las altas precisiones de las computadoras multinúcleo, los clústeres y las cuadrículas se han vuelto cada vez más disponibles y más potentes en la actualidad [7]. Por lo tanto, es interesante utilizar tecnologías de alto rendimiento para desbloquear el potencial de dichos sistemas. Mientras tanto, las bibliotecas de programación paralela como OpenMP y MPI hicieron posible que los programadores aprovecharan la gran capacidad computacional de multinúcleo y clústeres para uso general.

Se han realizado muchos intentos para calcular de manera eficiente la matriz de distancias. Como se ve en la siguiente sección, los que usaron GPU son realmente rápidos, pero la longitud de las secuencias es limitada. Otros métodos que pueden manejar secuencias largas y producir una alineación precisa son relativamente lentos. Nuestra motivación es proporcionar un método eficiente que combine la velocidad y la capacidad de alinear secuencias largas.

Este documento es una extensión de nuestro trabajo en [8]. Una versión mejorada de DistVect se propone el algoritmo. Los cálculos se redistribuyen de manera eficiente para gestionar el desequilibrio de carga con el objetivo de mejorar el rendimiento general. El algoritmo se ha actualizado al modelo híbrido para obtener los máximos beneficios de los modelos de grano fino y grueso. El método propuesto está dedicado a los clústeres multinúcleo debido a su popularidad en la actualidad y es para lograr una mayor velocidad de procesamiento.

Las principales contribuciones de este trabajo son: (i) diseñar un sistema extendido altamente paralelo DistVect algoritmo para el cálculo de la matriz de distancia en clústeres multinúcleo, llamado DistVect1, para alinear grandes secuencias rápidamente, (ii) implementar la propuesta DistVect1 algoritmo utilizando C ++ con MPI y OpenMP en la plataforma Bibliotheca Alexandrina, (iii) llevando a cabo experimentos integrales utilizando una amplia variedad de tamaños de conjuntos de datos reales y mostrando que nuestro programa desarrollado supera tanto a ClustalW-MPI como a SSE2 en términos de tiempo de ejecución, (iv) investigando el impacto de aumentar tanto el número como la longitud de las secuencias en la aceleración y demostrar que DistVect1 produce una aceleración significativa cuando aumenta la longitud de los genomas.

El resto de este documento está organizado de la siguiente manera. La sección 2 resume brevemente los métodos y algoritmos fundamentales relacionados con la matriz de distancias. La sección 3 explica el DistVect algoritmo. La sección 4 analiza la mejora DistVect1. La Sección 5 describe brevemente el procedimiento de implementación y presenta los resultados con un análisis detallado. Finalmente, la Sección 6 concluye el documento y sugiere trabajos futuros.

2. Trabajo relacionado

El cálculo de la matriz de distancia se considera la etapa sustancial de la mayoría de las herramientas de alineación de secuencias múltiples. Para alinear un conjunto de datos de tamaño

, donde es el número de secuencias y su longitud promedio, el cálculo de los elementos DM requiere

comparaciones por pares. Cada comparación usa una matriz de tamaño

para obtener la distancia. Estos cálculos pueden volverse prohibitivos cuando y son muy grandes (es decir, en decenas de miles). Hay pocos programas de alineación múltiple que manejen conjuntos de datos de este tamaño, con una precisión aceptable, como MAFFT [9], DIALIGN [10] y Clustal [11]. Los métodos más precisos solo podían manejar rutinariamente cientos o algunos miles de secuencias, como MUSCLE [12], Probcoms [13] y T-Coffee [14].

Se han encontrado soluciones prometedoras para paralelizar los cálculos de DM. Se presentaron varios algoritmos paralelos para superar los obstáculos de velocidad / espacio para diferentes sistemas HPC, como máquinas multiprocesador y grupos de estaciones de trabajo. Una categoría se centra en paralelizar las operaciones en componentes de datos más pequeños. Las implementaciones típicas de este enfoque que utilizan subprocesos múltiples se encuentran en [15, 16]. Los demás se concentran en distribuir cada par independiente de secuencias en diferentes procesadores. El método paralelo más popular que utiliza este enfoque es ClustalW-MPI [17]. Está dirigido a clústeres de estaciones de trabajo con arquitectura de memoria distribuida. Su principal contribución fue proporcionar una implementación eficiente de memoria distribuida de ClustalW que se puede ejecutar en una amplia gama de clústeres de PC con memoria distribuida y multicomputadoras paralelas.

Wirawan y col. explotar en [18] el uso de un enfoque intertask, con el modelo SIMD. Aprovechan el hecho de que todos los elementos de la misma diagonal menor se pueden calcular de forma independiente en paralelo. Utilizaron procesadores Intel comunes con el conjunto de instrucciones SSE2, que admiten elementos de 16 bits, y produjeron una herramienta de software llamada SSE2, que se escribió principalmente en C con API p-thread. Este enfoque ha sido explotado en algunos métodos recientes [15, 19-21] donde el paralelismo ocurre dentro de un solo par de secuencias, para evitar dependencias de datos dentro de la matriz de alineación.

La GPU se ha utilizado en [22] para acelerar la alineación de secuencias. Ha reformulado algoritmos de alineación basados ​​en programación dinámica como algoritmos de transmisión en términos de primitivas de gráficos por computadora. Los resultados experimentales muestran que el enfoque basado en GPU permite aceleraciones de más de un orden de magnitud con respecto a las implementaciones de CPU optimizadas. Sin embargo, esto no es grave ya que el 99,8 por ciento de las secuencias de la base de datos tienen una longitud & lt4,096. Además, es razonable esperar que los tamaños de búfer de textura permitidos aumenten en el hardware de gráficos de próxima generación.

Además, CUDASW ++ [20] paraleliza el algoritmo Smith-Waterman para CUDA GPU que calcula las puntuaciones de similitud de una secuencia de consulta emparejada con cada secuencia en una base de datos. El análisis de rendimiento muestra una mejora sustancial del rendimiento general del orden de tres a cuatro actualizaciones de gigaceldas por segundo. La versión de una sola GPU logra un rendimiento promedio de 9.509 GCUPS con un rendimiento más bajo de 9.039 GCUPS y un rendimiento más alto de 9.660 GCUPS, y la versión de doble GPU logra un rendimiento promedio de 14.484 GCUPS con un rendimiento más bajo de 10.660 GCUPS y un rendimiento más alto rendimiento de 16.087 GCUPS. Pero admite secuencias de consulta de hasta 59 K y para secuencias de consulta con una longitud de 144 a 5.478.

Este enfoque ha sido explorado más a fondo por sus autores dando como resultado SIMT optimizado y algoritmo vectorizado particionado CUDASW ++ 2.0 [19] con un rendimiento asombroso de hasta 17 GCUPS en una GeForce GTX 280 y 30 GCUPS en una GeForce GTX 295 de doble GPU.

Asimismo, CUDASW ++ 3.0 [21] acopla las instrucciones SIMD de CPU y GPU y realiza cálculos simultáneos de CPU y GPU. Emplea unidades de ejecución vectorial basadas en SSE como aceleradores y emplea instrucciones de video CUDA PTX SIMD para obtener más paralelismo de datos más allá del modelo de ejecución SIMT. La evaluación muestra que CUDASW ++ 3.0 obtiene una mejora de rendimiento sobre CUDASW ++ 2.0 hasta 2.9 y 3.2, con un rendimiento máximo de 119.0 y 185.6 GCUPS, en una tarjeta gráfica GeForce GTX 680 de una sola GPU y una GeForce GTX 690 de doble GPU, respectivamente. También ha demostrado una aceleración significativa sobre SWIPE y BLAST +. Sin embargo, la secuencia de consulta más larga tenía una longitud de 5.478 para buscar en las bases de datos de proteínas Swiss-Prot que tienen la mayor longitud de secuencia 35.213.

Sin embargo, la mayoría de las implementaciones de GPU no pueden alinear secuencias de más de 59.000 residuos. Esto se debe a las características SIMD intrínsecas del GPG, donde la canalización permite un gran factor de aceleración, pero el uso intenso de la memoria puede provocar cuellos de botella. Esto conduce al despliegue de otras arquitecturas como muchos núcleos [23]. MC64-ClustalWP2 se ha desarrollado recientemente como una nueva implementación del algoritmo ClustalW, para alinear secuencias largas en arquitecturas con muchos núcleos. Ejecuta múltiples alineaciones 18 veces más rápido que el algoritmo ClustalW original y puede alinear secuencias que son relativamente largas (más de 10 kb).

Los autores propusieron un algoritmo de cálculo de matriz de distancia vectorizado llamado DistVect [8]. El algoritmo aborda el problema de construir una herramienta paralela para multinúcleos que produzca la alineación de múltiples secuencias en poco tiempo sin utilizar mucho espacio de almacenamiento. La principal contribución fue la vectorización de todas las matrices utilizadas en el cálculo. Experimentalmente, el método propuesto logró una buena capacidad de alinear un gran número de secuencias a través de potentes capacidades de manejo de almacenamiento mejoradas con una mejora eficiente del tiempo de procesamiento general.

3. DistVect Algoritmo

DistVect [8] es un algoritmo acelerado que calcula la matriz de distancia para alinear grandes conjuntos de datos. Tiene la ventaja de agotar menos espacio. Toma, como entrada , secuencias

de longitud media, con su matriz de sustitución sbt y el coste de gab

. Genera un vector de distancia,

, que contiene la puntuación de similitud (distancia) para cada una de las dos secuencias. Trabaja en la vectorización de matrices presentadas por Liu et al. en [22] y utilizado por Wirawan et al. en [18]. Paraleliza los cálculos de los vectores de resolución, teniendo en cuenta la ventaja de la independencia de los elementos de las diagonales menores de las matrices.

Para calcular el número de coincidencias exactas y hacerlo adecuado para una implementación paralela de grano fino, Liu et al. [22] formuló una relación de recurrencia para el número de cálculos de coincidencia exacta que es más adecuada para la implementación utilizando una penalización por brecha lineal. Esta fórmula facilita los cálculos sin calcular la alineación real. Dadas dos secuencias


Ver el vídeo: matriz de