6 votos

¿Lo que ' s la forma más eficiente para cargar atributos de entidades en una matriz de numpy?

Actualmente estoy trabajando en un add-on que se basa en el usuario la elección de los campos de las tablas (que puede ser de shapefiles, csv o dbf) que se abren en QGIS y, a continuación, hacer los cálculos con dichos datos.

Ahora mismo estoy en bucle a través de todas las características y la recogida de los datos utilizando el estándar de libro de cocina técnicas de bucle a través de las características y atributos de lectura, pero se está tomando demasiado tiempo. Algunas tablas tienen alrededor de 25.000.000 de características, y los datos reales de carga tarda mucho más que el de computación. Hay algún atajo? Puedo cargar conjunto de vectores a la vez o alguna otra cosa similar?

Se me ocurre que puedo conseguir el archivo de la información y de ir directamente a la base de datos en disco y se carga a partir de ahí, pero lo que REALMENTE quiero evitar.

Parece que la pregunta no era muy claro, así que aquí va lo que tengo ahora.

all_matrix=[]
for f in matrix.getFeatures():
    a=feat.attributes()[origin]
    b=feat.attributes()[destination]
    c=feat.attributes()[flow]
    all_matrix.append([a,b,c])
 matrix=np.array(all_matrix)

3voto

deaan Puntos 11

¿Qué pasa con la bandera de QgsFeatureRequest.NoGeometry ?

all_matrix=[]
request = QgsFeatureRequest()
request.setFlags(QgsFeatureRequest.NoGeometry)
for f in matrix.getFeatures(request):
    a=feat.attributes()[origin]
    b=feat.attributes()[destination]
    c=feat.attributes()[flow]
    all_matrix.append([a,b,c])
 matrix=np.array(all_matrix)

1voto

Eli Bendersky Puntos 82298

Puede recuperar las funciones seleccionadas con

vl = iface.acitveLayer()
selectedFeatures = vl.selectedFeatures()

En caso de tener muchas características, puede ser, puede utilizar selectedFeaturesIds() y luego consultar e iterar sobre estos para evitar copiar todas las características en la memoria.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X