使用基于自身的条件语句索引 numpy 数组是什么意思?

What is meant by indexing a numpy array with a conditional statement based on itself?

我正在开发一个用于网络分析的大型库,遇到了一个我不熟悉其调用约定的令人困惑的行。

    monitors = [1,2,3,4]
    nmonitors = 7 # This value is passed arbitrarily to the function

    while len(monitors) < nmonitors:
        remaining = np.arange(len(routers)) # len(routers) here is == 5
        for i in monitors:
            remaining = remaining[remaining != i]
        monitors.append(np.random.choice(remaining))

循环内部问题中的行通过基于 i 及其自身的条件对 remaining 数组进行索引。经过一些调试后,它似乎不仅仅是评估一个布尔值并使用该布尔值索引数组?

有没有人熟悉这个 syntax/convention 并能指出 numpy 文档的相关部分或解释一下?我已经搜索了几个小时,仍然没有结果,谢谢。

它returns一个新的布尔值数组,与原来的remaining维度相同。对于 remaining 的每个原始元素,只要该元素不等于 i,新数组中的等效索引为 true.

没有特殊的语法,只是结合使用条件测试生成布尔数组,并使用布尔值索引数组。

示例数组:

In [125]: arr = np.arange(4)
In [126]: arr
Out[126]: array([0, 1, 2, 3])

使用布尔值索引:

In [127]: arr[[True,False,True,False]]
Out[127]: array([0, 2])

通过测试创建布尔值:

In [128]: (arr%2)==0
Out[128]: array([ True, False,  True, False])
In [129]: arr[(arr%2)==0]
Out[129]: array([0, 2])

或者像你的例子这样的测试:

In [131]: arr!=2
Out[131]: array([ True,  True, False,  True])
In [132]: arr[arr!=2]
Out[132]: array([0, 1, 3])

所以内部循环从 remaining 中删除所有等于 monitors 的元素,只留下 [0]?较大的循环有问题,但这与布尔索引的“语法”无关。