Я хочу превратить каждый 0 большого списка массивов в -1. Это должно быть сделано как можно быстрее. Для меня цикл for очень медленный. Мой массив представляет собой массив numpy. Знаете ли вы более быстрое решение этой простой проблемы?
Вот пример кода:
test_array=[1 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0]
for index, value in enumerate(test_array):
if value == 0:
l[index] = -1
test_array=[1 -1 -1 1 -1 -1 1 1 -1 1 1 -1 1 -1 -1 -1]
Мой реальный список намного длиннее, чем в этом примере, поэтому быстрое решение является фактором производительности.
Пожалуйста, включите реальный код в свой вопрос. В настоящее время он не запускается при копировании.
Возможный дубликат stackoverflow.com/questions/19666626/… / stackoverflow.com/questions/19766757/…






пытаться:
import numpy as np
array1 = np.array([1,0 ,0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0])
print (np.where(array1 == 0, -1, array1))
выход:
[ 1 -1 -1 1 -1 -1 1 1 -1 1 1 -1 1 -1 -1 -1]
In [1]: a = np.random.randint(0,2,1000000)
In [2]: a
Out [2]: array([0, 1, 1, ..., 1, 1, 0])
In [3]: %timeit a[a==0]=-1
1.73 ms ± 50.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Если вы включите время, было бы более значимым, если бы вы сравнили их с исходным подходом (или подходами в других ответах).
Проверка времени таким образом нецелесообразна. Значения a изменяются при первом тестовом вызове и впоследствии остаются прежними.
Если ваш test_array является фактическим списком
test_array = [1,0 ,0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0]
test_array_New = []
for i in test_array:
if i != 0:
test_array_New.append(i)
else:
test_array_New.append(-1)
test_array_New
Выход:
[1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, -1, -1, -1]
Даже если ввод представляет собой список, может ли этот метод превзойти решение в исходном сообщении?
Я думал дать основы того, как читать список с помощью простого цикла. Я пробовал это с python2.7 и работал. Это будет медленнее, чем zip, и точно перечислит.
ОП явно просил решение, которое работает лучше, чем предоставленное решение, а не просто другое решение. При этом это решение можно было бы сделать быстрее, используя базовые методы оптимизации, такие как понимание списков.
укажите, являются ли они фактическими массивами (т.е. массивами numpy) или просто списками. В противном случае ваш вопрос неоднозначен.