Python - Python - Operaciones con Matrices

 
Vista:

Python - Operaciones con Matrices

Publicado por Jairoes (1 intervención) el 11/01/2017 13:47:42
Hola,

estoy aprendiendo Python y tengo algunos problemas. Mi objetivo es leer de un fichero de texto una lista de puntos con sus coordenadas (x, y, z).
Crear una matriz y realizar varias operaciones:

1.- Ordenar todas las líneas de la matriz por el valor de su coordenada 'z' y salvar la matriz.
2.- A partir de la matriz anterior crear matrices a partir de grupos de cuatro líneas y ordenar estas matrices pequeñas en función del valor de la coordenada 'x' y salvar en una nueva matriz.

Estoy utilizando python 3.5. La matriz la puedo importar y ordenar según la operación descrita en el punto 1 sin problemas.

Al ejecutar el punto 2 no consigo crear un loop y salvar la matriz de forma correcta. Mi código es el siguiente:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#Extraer lineas puntos fichero
 
infile = open('filename,'r')
outfile = open('salida_puntos.txt','w')
print('>>>> Working')
palabra = 'prescribed_point'
for linea in infile:
	if palabra in linea:
		outfile.write (linea)
infile.close()
outfile.close()

filas = 0
filas += len(open('salida_puntos.txt').readlines())
print('Numero de filas:', filas)
if (filas > 576):
	print('El numero de puntos es mayor al que debería (576). Por favor revisa puntos duplicados')

file = open('salida_puntos.txt', 'r')
data = file.read().split('\n')
file.close()
 
linea = 0
lista = []
while (linea) < (filas):
    uno = data[linea].split(' ')
    lista.append(uno)
    linea += 1
lista.append(uno)
 
cantidad = len(lista)
print('Longitud lista:', cantidad)
print('Numero filas:', filas)
if cantidad != filas:
    print('Borrada última fila de la lista')
lista.pop()
cantidad = len(lista)
print('Longitud lista:', cantidad)
 
coordx_aux = [[x[1] for x in lista]]
coordx_aux2 = [[float(y) for y in x] for x in coordx_aux]
coordx = coordx_aux2[0]
 
coordy_aux = [[x[2] for x in lista]]
coordy_aux2 = [[float(y) for y in x] for x in coordy_aux]
coordy = coordy_aux2[0]
 
coordz_aux = [[x[3] for x in lista]]
coordz_aux2 = [[float(y) for y in x] for x in coordz_aux]
coordz = coordz_aux2[0]
 
desc = [x[7] for x in lista]
 
matriz = [[coordx[i], coordy[i], coordz[i], desc[i]] for i in range(len(coordx))]
 
#Ordenar matriz en 'z' Primer ordenamiento
matriz.sort(key=lambda x:x[2], reverse=True)
 
#Crear matrices de 4 lineas y ordenarlas en 'x'
 
ref1 = 0
ref2 = 4
matriz2 = []
while ref2 <= len(matriz):
    vortex = matriz[ref1:ref2]
    vortex.sort(key=lambda x:x[0], reverse=True)
    matriz3 = vortex + matriz2
    ref1 += 4
    ref2 += 4
matriz4 = vortex + matriz3

no consigo crear una nueva matriz con todos los puntos y ordenados como yo quiero. Creo que el código debería de ser asi pero matriz4 solo me contiene las cuatro últimas líneas y no todas.

Gracias por adelantado,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder