Encuentra la longitud de Python de matriz 2D

82

¿Cómo encuentro cuántas filas y columnas hay en una matriz 2d?

Por ejemplo,

Input = ([[1, 2], [3, 4], [5, 6]])`

debe mostrarse como 3 filas y 2 columnas.

Ronaldinho aprende codificación
fuente
4
Parece que debería estar usando una matriz numpy, no una lista de listas
wim

Respuestas:

158

Me gusta esto:

numrows = len(input)    # 3 rows in your example
numcols = len(input[0]) # 2 columns in your example

Suponiendo que todas las sublistas tengan la misma longitud (es decir, no es una matriz irregular).

Óscar López
fuente
5
Siempre que no sea una matriz irregular, esto es ideal.
Makoto
yo, quiero encontrar la suma de todos los elementos en esa matriz 2D def sum1 (entrada): suma = 0 para la fila en el rango (len (entrada) -1): para col en el rango (len (entrada [0]) - 1 ): suma = suma + entrada [fila] [col] retorno suma imprimir suma1 ([[1, 2], [3, 4], [5, 6]]) Muestra 4 en lugar de 21 (1 + 2 + 3 + 4 + 5 + 6 = 21). Donde esta mi error
Ronaldinho Learn Coding
1
Hay una solución más simple: suma (suma (x) para x en la entrada)
Óscar López
1
@LongBodie: El error es que resta 1 de las longitudes donde no debería. Range(n)ya da 0,1, ..., n-1 .
Junuxx
39

Puede utilizar numpy.shape.

import numpy as np
x = np.array([[1, 2],[3, 4],[5, 6]])

Resultado:

>>> x
array([[1, 2],
       [3, 4],
       [5, 6]])
>>> np.shape(x)
(3, 2)

El primer valor de la tupla es el número de filas = 3; El segundo valor de la tupla es el número de columnas = 2.

Akavall
fuente
2
Gracias, no quería usar numpy para esto
urgeo
18

Además, la forma correcta de contar el número total de artículos sería:

sum(len(x) for x in input)
MattNo
fuente
¡Genial, esto era exactamente lo que necesitaba! En mi caso, puedo contar todos los elementos de una lista hasta el segundo grado: sum (len (x) if isinstance (x, list) else 1 for x in some_list)
Bjarne Magnussen
10

Suponiendo que la entrada [fila] [col],

    rows = len(input)
    cols = map(len, input)  #list of column lengths
machow
fuente
1

También puede usar np.size (a, 1), 1 aquí está el eje y esto le dará el número de columnas

Riya Das
fuente
0

asumiendo input[row][col]

rows = len(input)
cols = len(list(zip(*input)))
MiaeKim
fuente