Python - PYTHON. Transformar una columna en cero si coincide el maximo de la columna con la diagonal

   
Vista:

PYTHON. Transformar una columna en cero si coincide el maximo de la columna con la diagonal

Publicado por Victoria (2 intervenciones) el 27/06/2015 23:10:55
Hola, estoy desarrollando una especificacion de algoritmos en python y tengo un par de dudas que no me dejan continuar.
La consigna me pide que ingrese una matriz cuadrada por teclado, y que encuentre los valores maximos de cada columna.
Luego, que genere una matriz nueva con los datos de la matriz ingresada por teclado, y que cuando la posicion del valor maximo de cada columna, coincida con la posicion de la diagonal principal, que esa columna se complete con ceros.
No me sale hacer la ultima parte, si alguien me ayudara sería de mucha ayuda. Eso es lo que pude hacer.Gracias

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
def ImpreMatriz(arreglo,texto):
  print texto
  for i in range(len(arreglo)):
    for j in range(len(arreglo[0])):
      print '%4d' %(arreglo[i][j]),
    print
 
def MayorCadaColumna(arreglo):
  mayor_columna= [0]*len(arreglo)
  for j in range(len(arreglo)):
    mayor= arreglo[0][j]
 
    for i in range(len(arreglo)):
      if arreglo[i][j] > mayor:
        mayor= arreglo[i][j]
        mayor_columna[j]= mayor
 
  return mayor_columna
 
filas= int(raw_input('Filas: '))
columnas= int(raw_input('Columnas: '))
 
if filas != columnas:
  print 'La matriz no es cuadrada'
  print 'Fin del programa'
else:
  matriz= []
  for i in range(filas):
    matriz.append([0]*columnas)
  for i in range(filas):
    for j in range(columnas):
      matriz[i][j]= int(raw_input('Elementos [%d][%d]: ' %(i,j)))
 
  formato_matriz= ImpreMatriz(matriz,'Matriz Ingresada')
  for i in range(len(matriz)):
    for j in range(len(matriz)):
      print
 
 
  Mayor_cada_columna= MayorCadaColumna(matriz)
  print 'Mayor de cada columna'
  print Mayor_cada_columna
 
 
  Matriz_nueva= []
  Diagonal= []
  for i in range(filas):
    for j in range (columnas):
      if (i+j) == filas:
        Diagonal.append(matriz[i][j])
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
Imágen de perfil de xve

PYTHON. Transformar una columna en cero si coincide el maximo de la columna con la diagonal

Publicado por xve (1229 intervenciones) el 28/06/2015 10:12:39
Hola Victoria, te he modificado un poco el código, y ahora te devuelve de cada columna los mayores.. te he modificado la función MayorCadaColumna.

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
def ImpreMatriz(arreglo,texto):
	print texto
	for i in range(len(arreglo)):
		for j in range(len(arreglo[0])):
			print '%4d' %(arreglo[i][j]),
		print
 
def MayorCadaColumna(arreglo):
	mayor_columna=[]
	for i in range(len(arreglo)):
		mayor_columna.append([0]*len(arreglo))
 
	for j in range(len(arreglo)):
		maxValue=max(arreglo[j])
		print maxValue
		for i in range(len(arreglo[j])):
			if arreglo[j][i]==maxValue:
				mayor_columna[j][i]=arreglo[j][i]
	return mayor_columna
 
filas= int(raw_input('Filas: '))
columnas= int(raw_input('Columnas: '))
 
if filas != columnas:
	print 'La matriz no es cuadrada'
	print 'Fin del programa'
else:
	matriz= []
	for i in range(filas):
		matriz.append([0]*columnas)
	for i in range(filas):
		for j in range(columnas):
			matriz[i][j]= int(raw_input('Elementos [%d][%d]: ' %(i,j)))
 
	formato_matriz= ImpreMatriz(matriz,'Matriz Ingresada')
	for i in range(len(matriz)):
		for j in range(len(matriz)):
			print
 
 
	Mayor_cada_columna= MayorCadaColumna(matriz)
	print 'Mayor de cada columna'
	print Mayor_cada_columna

Es esto lo que buscabas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PYTHON. Transformar una columna en cero si coincide el maximo de la columna con la diagonal

Publicado por Victoria (2 intervenciones) el 28/06/2015 22:06:43
Estuve probando el código nuevo, pero me devuelve los mayores de cada fila, y en la consigna me pide los mayores de cada columna. Acá va la consigna con el ejemplo, igual, muchisimas gracias por la ayuda!!

1)La cantidad de filas y columnas de un arreglo se ingresa por teclado. Validar que la matriz es cuadrada, sino emitir un mensaje en la consola "La matriz no es cuadrada" y terminar

2)Debe ingresar los valores del arreglo desde el teclado. Una vez cargada se debe mostrar por consola, en la primera linea debe mostrar el texto "Matriz Ingresada" y en las siguientes los datos de la matriz con formato de matriz

3)Generar un arreglo de una fila con el mayor valor de cada columna

4)Mostrar el resultado en la consola, en la primer linea muestre el texto "Mayor de Cada Columna" y en la siguiente los mayores encontrados

5)Con los datos de la matriz (2) y del arreglo (3) se deberá generar una NUEVA matriz, copiando los datos de (2) salvo en las columnas donde el mayor calculado en(3) coincida con un elemento de la diagonal principal si esto ocurre esa columna debe cargarse toda con ceros

6)Mostrar la nueva matriz por consola, en la primera linea debe mostrar el texto "Nueva Matriz" y en las siguientes los datos de la matriz con formato de matriz

Cree una funcion "def MayorCadaColumna(arreglo)" esta función retornará el arreglo de una fila solicitado en (3)

Cree una procedimiento "def ImpreMatriz(arreglo,texto)" para mostrar por consola los valores del arreglo en los puntos (2) y (6) el parámetro texto contendrá el mensaje de la primera fila impresa

Ej. de las salidas de un caso particular. Cumple con la condición de
ser una matriz cuadrada

Matriz Ingresada
6 2 3 4
5 3 -2 11
1 5 14 7
3 -6 8 -5

Mayor de Cada Columna
6 5 14 11

Nueva Matriz
0 2 0 4
0 3 0 11
0 5 0 7
0 -6 0 -5
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Obtener el máximo de las columnas

Publicado por xve (1229 intervenciones) el 29/06/2015 07:59:11
Perdón Victoria, me lié....

Para obtener el máximo de las columnas, puedes hacerlo utilizando la librería numpy... algo así:
1
2
3
import numpy
b=[[3, 5, 7], [8, 1, 3]]
numpy.amax(b,axis=0)

Esto devuelve un array con:
1
array([8, 5, 7])
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Obtener todas las diagonales de una matriz

Publicado por xve (1229 intervenciones) el 29/06/2015 08:00:39
Hola Victoria, aqui te adjunto un simple código que he encontrado para que te devuelve todas las diagonales de una matriz, de esta manera podrás comparar si la matriz coincide con los valores máximos:

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
 
matrix = np.array(
         [[-2,  5,  3,  2],
          [ 9, -6,  5,  1],
          [ 3,  2,  7,  3],
          [-1,  8, -4,  8]])
 
diags = [matrix[::-1,:].diagonal(i) for i in range(-3,4)]
diags.extend(matrix.diagonal(i) for i in range(3,-4,-1))
print [n.tolist() for n in diags]

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar