Как самым быстрым способом превратить каждый 0 в -1 в списке массивов?

Я хочу превратить каждый 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]

Мой реальный список намного длиннее, чем в этом примере, поэтому быстрое решение является фактором производительности.

укажите, являются ли они фактическими массивами (т.е. массивами numpy) или просто списками. В противном случае ваш вопрос неоднозначен.

amdex 24.07.2019 09:27

Пожалуйста, включите реальный код в свой вопрос. В настоящее время он не запускается при копировании.

MSeifert 24.07.2019 09:34

Возможный дубликат stackoverflow.com/questions/19666626/… / stackoverflow.com/questions/19766757/…

MSeifert 24.07.2019 09:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
71
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

пытаться:

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)

Если вы включите время, было бы более значимым, если бы вы сравнили их с исходным подходом (или подходами в других ответах).

MSeifert 24.07.2019 09:40

Проверка времени таким образом нецелесообразна. Значения a изменяются при первом тестовом вызове и впоследствии остаются прежними.

GZ0 24.07.2019 09:46

Если ваш 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]

Даже если ввод представляет собой список, может ли этот метод превзойти решение в исходном сообщении?

GZ0 24.07.2019 09:53

Я думал дать основы того, как читать список с помощью простого цикла. Я пробовал это с python2.7 и работал. Это будет медленнее, чем zip, и точно перечислит.

kashiff007 24.07.2019 10:26

ОП явно просил решение, которое работает лучше, чем предоставленное решение, а не просто другое решение. При этом это решение можно было бы сделать быстрее, используя базовые методы оптимизации, такие как понимание списков.

GZ0 24.07.2019 10:35

Другие вопросы по теме