hola xunilk, he leído con mucho interés tu trabajo sobre GRASS y Shapely pero tengo algunas observaciones para ayudarte (no tengo tu mail) :
Trabajas con matrices pero el elemento fundamental de Python son las listas y no las matrices. Puedes simplificar muchísimo tu script de la manera siguiente:
>>> pt = [] #nueva lista vacia
>>> for i in range(len(lista)):
... info = grass.vector_info_topo(lista[i])
... if (info['points']> 0):
... pt.append(lista[i]) # "relleno" de la lista con las capas puntos
y ahora puedes utilizar la notación con indices
>>> pt[0]
'pts3dred@bernard'
>>> pt[1]
'pts3dred3d@bernard'
Igual con el tratamiento de las coordenadas xyz
>>> vectorial="pts3dred3d"
>>> puntos = grass.read_command("v.to.db", flags="p", map=vectorial, type="point", option="coor", units="meters", quiet="True")
>>> type(puntos) # puntos es un string
<type 'str'>
>>> pts = puntos.split("\n") # pero pts es una lista
>>> type(pts)
<type 'list'>
>>> xyz = [] #nueva lista vacia
>>> for i in pts::
... xyz.append(pts[i].split("|")) #relleno de la lista
resultato
>>> xyz
['1', '114718.535582253', '119568.077575195', '0'], ['1', '114718.535582253', '119568.077575195', '0'], ['1', '114718.535582253', '119568.077575195', '0'], ['1', '114718.535582253', '119568.077575195', '0']....;]
y
>>> xyz[0][1]
'114718.535582253'
>>> xyz[0][2]
'119568.077575195'
>>> xyz[1][1]
'114718.535582253'
>>> xyz[1][2]
119568.077575195
etc.
después con Shapely
>>> puntoi = Point(float(xyz[0][1]),float(xyz[0][2]),float(xyz[0][3]))
>>> puntoi.x
114718.535582253
>>> puntoi.y
119568.077575195
>>> puntoi.y
etc...
Las listas son los elementos fundamentales en Python sin necesidad de Numpy o de matrices