-2

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

    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))

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

是否有人熟悉此语法/约定并能够将我指向 numpy 文档的相关部分或进行解释?找了好几个小时还是没有结果,谢谢。

4

2 回答 2

0

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

一个示例数组:

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])

所以内部循环正在删除所有等于monitorsfrom 的元素remaining,只留下[0]? 较大的循环是错误的,但这与布尔索引的“语法”无关。

于 2021-07-02T03:12:12.593 回答
-1

它返回一个新的布尔值数组,与原始remaining. 对于 的每个原始元素remaining,只要该元素不等于i,新数组中的等效索引就是true

于 2021-07-02T02:23:48.483 回答