什么`[b for a in a b for a b in a b == k]`是什么意思?

时间:2017-03-04 22:12:35

标签: python numpy list-comprehension

绝对难以接受:

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是一个整数的2D数组,k是一个整数?或者将它括起来以帮助我理解事物的优先级?

2 个答案:

答案 0 :(得分:3)

这相当于:

result = []
for a in x:
    for b in a:
        if not b == k:
            result.append(b)
indices = numpy.array(result)

您可以从左侧读取列表推导以进行编写,并将它们转换为单独的for循环。

答案 1 :(得分: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])