Что означает `[b для a в x для b в a, если не b==k]`?
Я был абсолютно озадачен:
indices = numpy.array([b for a in x for b in a if not b==k])
Любые указатели на то, как я должен читать [b for a in x for b in a if not b==k]
, в контексте x
будучи двумерным массивом целых чисел и k
быть целым числом? Или заключите в скобки это, чтобы помочь мне понять приоритет вещей?
2 ответа
Решение
Это выравнивает одно измерение x
массив (я думаю, что код предполагает x
является двумерным массивом) и удаляет каждое вхождение целого числа k
, Например:
>>> import numpy as np
>>> x = np.arange(20).reshape(4, 5) # makes it a 2D array
>>> x
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
>>> k = 4
>>> inds = np.array([b for a in x for b in a if not b==k])
>>> inds
array([ 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
Обратите внимание, что ваш код не использует мощную и быструю функциональность NumPy. Если x
это массив, который вы можете просто использовать:
>>> x[x!=k] # make it 1D and keep only values != k
array([ 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
Это эквивалентно:
result = []
for a in x:
for b in a:
if not b == k:
result.append(b)
indices = numpy.array(result)
Вы можете прочитать список понимания слева, чтобы написать и превратить их в отдельные циклы for.