Quiero generar esta matriz de ceros en algún tipo de bucle a menos que haya otro método. Las primeras líneas a continuación salen exactamente como quiero.

No puedo reproducir esto en un bucle ya que la función append no se agrega como creo que lo hará. ¿Alguna sugerencia por favor?

Editar: Por supuesto, obtengo un -1 por hacer una pregunta. ¿Todas las preguntas aquí tienen que ser inteligencia de nivel alienígena?


import numpy as np

# This is how I want t_in to be like, 64 zeros in a nested list.
t_in = np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]])
print(t_in) # Looks good.
print("\n")

# This is my non working attempt to do it in a list.
t_in = np.array([])
for i in range(0, 64):
    np.append(t_in, [0])

print(t_in) # Not the same :(

-1
CircuitPro 1 oct. 2019 a las 18:30

3 respuestas

La mejor respuesta

¿Por qué hacerlo más complicado de lo que realmente es? Solo use las herramientas proporcionadas por numpy:

t_in = np.zeros((1, 64))

Es más rápido que Python simple y más limpio de leer.

2
SeanSdahl 1 oct. 2019 a las 17:53

¿Esto resuelve tu problema?

>>> t_in = [0 for _ in range(64)]
>>> t_in
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> t_in = [t_in]
>>> t_in
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
>>>

No estoy familiarizada con numpy, tal vez hay una manera mejor.

2
Pedro Rodrigues 1 oct. 2019 a las 15:33

¿Por qué usar un bucle? Solo aprovecha cómo funcionan las listas lists

>>> t_in = [[0] * 64]
>>> t_in
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0]]

Este es el enfoque más rápido² incluso en comparación con np.zeros

>>> timeit('[[0]*64]')
1.5534695980022661
>>> timeit('[0 for _ in range(64)]')
10.40757498399762
>>> timeit('numpy.zeros((1, 64))', 'import numpy')
1.732236907002516
>>> #just to compare... let's make np.zeros into a list so each return the same thing.

Hat Dicho esto, este enfoque crea copias superficiales de los elementos de la lista para que todos sean el mismo objeto, aunque esto es irrelevante en esta situación.

²Si finalmente necesita una matriz, entonces np.zeros es la más rápida, pero si solo necesita una lista, entonces la opción de lista mul es la mejor.

2
Jab 1 oct. 2019 a las 18:10
58188090