2015-02-27 2 views
1

Давайте предположим a и b приведены ниже: -модифицирующих значений в массиве Numpy

a = np.arange(5) 
b = [0,1,2] 

То, что я хочу, что для индексов, за исключением тех, в b, значение в a должно быть равно -1. Таким образом, в приведенном выше случае a будет равна

a = array([0, 1, 2, -1, -1]) 

Существует метод, который я знаю то есть

a[list(set(a)-set(b))] = -1 

но занимает слишком много времени, и приводит к слишком много сложность когда на самом деле написав код. Как всегда, я ищу лучшие методы, чем выше. Не стесняйтесь использовать любые необходимые инструменты. Другой пример (на всякий случай): - если

a = np.arange(12) 
b = [3,5,6] 

Тогда то, что я действительно хочу a = array([-1, -1, -1, 3, -1, 5, 6, -1, -1, -1, -1, -1]) P.S. Не волнуйтесь a всегда будет иметь вид np.arange(int) и без значения b превышает длину a

ответ

3

Ну, если объект должен создать диапазон значений, которые являются либо же, как и их индекс или - 1, то проще всего начать со всего -1 и добавить нужные вам данные, а не наоборот.

>>> a = np.full(12, -1, dtype=int) 
>>> b = [3, 5, 6] 
>>> a[b] = b 
>>> a 
array([-1, -1, -1, 3, -1, 5, 6, -1, -1, -1, -1, -1]) 
3
>>> a = np.arange(12) 
>>> b = [3,5,6] 
>>> a[~np.in1d(np.arange(len(a)), b)] = -1 
>>> a 
array([-1, -1, -1, 3, -1, 5, 6, -1, -1, -1, -1, -1])