2011-08-11 26 views
6

Soy nuevo en python y me gustaría saber cómo se manipulan los elementos de una matriz. Si tengo por ejemplo:cómo acceder a los elementos en una matriz 2D?

a= (a11 a12 a13) and b = (b11 b12 b13) 
    a21 a22 a23    b21 b22 b23 

los he definido en Python como por ejemplo:

a=[[1,1],[2,1],[3,1]] 
b=[[1,2],[2,2],[3,2]] 

vi que no puede referirse a a[1][1] pero a a[1] que me da un resultado de [2,1]. Entonces, no entiendo cómo puedo acceder a la segunda fila de estas matrices? Eso sería a21, a22, a23, b21, b22, b23? ¿Y cómo podría hacer para multiplicarlos como c1 = a21*b21, c2 = a22*b22, etc.?

+1

¡es el mejor para empezar a usar numpy ahora! –

+2

¿Recibió un error al tratar de evaluar 'a [1] [1]'? Eso resulta ser 1. ¿Qué encontraste? –

Respuesta

6

Si tiene

a=[[1,1],[2,1],[3,1]] 
b=[[1,2],[2,2],[3,2]] 

Entonces

a[1][1] 

no tendrán ningún problema. Apunta a la segunda columna, segunda fila tal como lo deseaba.

No estoy seguro de lo que hizo mal.

Para multiplicar las células en la tercera columna que sólo puede hacer

c = [a[2][i] * b[2][i] for i in range(len(a[2]))] 

que funcionará para cualquier número de filas.

Editar: El primer número es la columna, el segundo número es la fila, con su diseño actual. Ambos están numerados de cero. Si desea cambiar el orden en que se puede hacer

a = zip(*a) 

o puede crear de esa manera:

a=[[1, 2, 3], [1, 1, 1]] 
+0

Eso es porque 'a [1]' solo tiene dos elementos. Las matrices están numeradas comenzando desde cero. 'a [1]' es la columna 1, por lo que solo hay 'a [1] [0]' y 'a [1] [1]'. – agf

+0

wow! Estoy impresionado con las respuestas rápidas. También fue mi error porque lo simplifiqué a este a, b caso de un problema mayor que tuve. Y también, de hecho, funciona un [0] [0], un [1] [1], pero como seguí intentando un [1] [2] recibí el error: Traceback (última llamada más reciente): Archivo "" , línea 1, en a [1] [2] IndexError: lista el índice fuera de rango ... y esto combinado con la lectura en algunos foros de que las matrices no son exactamente compatibles con python, me hizo pensar que estaba haciendo algo mal . Gracias de nuevo a todos! – caran

0

Parece que funciona aquí:

>>> a=[[1,1],[2,1],[3,1]] 
>>> a 
[[1, 1], [2, 1], [3, 1]] 
>>> a[1] 
[2, 1] 
>>> a[1][0] 
2 
>>> a[1][1] 
1 
0

a[1][1] funciona como se espera. ¿Quiere decir a11 como el primer elemento de la primera fila? Porque eso sería un [0] [0].

3

Si desea hacer muchos cálculos con 2d array, debe usar la matriz NumPy en lugar de la lista de nidos.

de tu pregunta, puede utilizar: zip (* a) para la transposición:

In [55]: a=[[1,1],[2,1],[3,1]] 
In [56]: zip(*a) 
Out[56]: [(1, 2, 3), (1, 1, 1)] 
In [57]: zip(*a)[0] 
Out[57]: (1, 2, 3) 
0

Mire cuidadosamente el número de soportes no tiene la matriz.Me encontré con un ejemplo cuando la función se respondía con el soporte adicional, así:

>>>approx 
array([[[1192, 391]], 
     [[1191, 409]], 
     [[1209, 438]], 
     [[1191, 409]]]) 

Y esto no funcionó

>>> approx[1,1] 
IndexError: index 1 is out of bounds for axis 1 with size 1 

Esto podría abrir los paréntesis:

>>> approx[:,0] 
array([[1192, 391], 
     [1191, 409], 
     [1209, 438], 
     [1191, 409]]) 

Ahora es posible utilizar una notación de acceso a elementos ordinarios:

>>> approx[:,0][1,1] 
409 
Cuestiones relacionadas