Как сгенерировать этот конкретный список для цикла for - PullRequest
0 голосов
/ 01 октября 2019

Я хочу сгенерировать этот массив нулей в некотором типе цикла, если нет другого метода. Первые несколько строк ниже выводятся именно так, как я хочу.

Я не могу воспроизвести это в цикле, так как функция добавления не добавляется так, как я думаю. Любые предложения, пожалуйста?

Редактировать: Конечно, я получаю -1 за вопрос. Каждый вопрос здесь должен быть интеллектом инопланетного уровня?


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 :(

Ответы [ 3 ]

2 голосов
/ 01 октября 2019

Зачем использовать цикл? Просто воспользуйтесь преимуществами работы списков…

>>> 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]]

Это самый быстрый подход, даже по сравнению с 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 При этом при таком подходе создаются мелкие копии элементов списка, поэтому они будутвсе должны быть одним и тем же объектом, хотя это не имеет значения в этой ситуации.

«Если вам, в конечном счете, нужен массив, то np.zeros - самый быстрый, но если вам нужен только список, тогда лучше использовать опцию list mul.

2 голосов
/ 01 октября 2019

Зачем делать это сложнее, чем есть на самом деле. Просто используйте инструменты, предоставленные numpy:

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

Это быстрее, чем обычный питон и чище читать.

2 голосов
/ 01 октября 2019

Решает ли это вашу проблему?

>>> 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]]
>>>

Не знаком с numpy, возможно, есть лучший способ.

...