Cómo declarar una matriz de ceros en python (o una matriz de un tamaño determinado)

Estoy tratando de construir un histogtwig de conteos … así que creo cubos. Sé que podría simplemente pasar y agregar un montón de ceros, es decir, algo así:

buckets = [] for i in xrange(0,100): buckets.append(0) 

¿Hay una manera más elegante de hacerlo? Siento que debería haber una manera de declarar una matriz de un tamaño determinado.

Sé que numpy tiene numpy.zeros pero quiero la solución más general

 buckets = [0] * 100 

Solo para completar: Para declarar una lista multidimensional de ceros en python, debe usar una lista de comprensión como esta:

 buckets = [[0 for col in range(5)] for row in range(10)] 

para evitar el intercambio de referencias entre las filas.

Esto parece más torpe que el código de chester1000, pero es esencial si se supone que los valores se cambiarán más adelante. Vea las preguntas frecuentes de Python para más detalles.

Puede multiplicar una list por un entero n para repetir la list n veces:

 buckets = [0] * 100 

Utilizar esta:

 bucket = [None] * 100 for i in range(100): bucket[i] = [None] * 100 

O

 w, h = 100, 100 bucket = [[None] * w for i in range(h)] 

Ambos generarán una lista de cubos multidimensional vacía y correcta 100×100

usar numpy

 import numpy zarray = numpy.zeros(100) 

Y luego usar la función de biblioteca Histogtwig

La solución más sencilla sería

 "\x00" * size # for a buffer of binary zeros [0] * size # for a list of integer zeros 

En general, debe usar más código pythonic como comprensión de lista (en su ejemplo: [0 for unused in xrange(100)] ) o usar string.join para búferes.

La pregunta dice ” Cómo declarar una matriz de ceros … ” pero luego el código de ejemplo hace referencia a la lista de Python:

 buckets = [] # this is a list 

Sin embargo, si alguien realmente desea inicializar una matriz, sugiero:

 from array import array my_arr = array('I', [0] * count) 

El purista de Python podría decir que esto no es pythonic y sugiere:

 my_arr = array('I', (0 for i in range(count))) 

La versión pythonic es muy lenta y cuando tienes unos cientos de arreglos para inicializar con miles de valores, la diferencia es bastante notable.

Dependiendo de lo que realmente vaya a hacer con los datos después de que se recopilen, es posible que colecciones.defaultdict (int) sea útil.

Bueno, me gustaría ayudarle publicando un progtwig de muestra y su salida

Progtwig: –

 t=input("") x=[None]*t y=[[None]*t]*t for i in range(1,t+1): x[i-1]=i; for j in range(1,t+1): y[i-1][j-1]=j; print x print y 

Salida: –

 2 [1, 2] [[1, 2], [1, 2]] 

Espero que esto aclare un concepto muy básico tuyo con respecto a su statement. Para inicializarlos con algunos otros valores específicos, como inicializarlos con 0..puede declararlos como:

x = [0] * 10

Espero eso ayude..!! 😉

Si necesitas más columnas:

 buckets = [[0., 0., 0., 0., 0.] for x in range(0)]