使用基于自身的条件语句索引 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]
?较大的循环有问题,但这与布尔索引的“语法”无关。
我正在开发一个用于网络分析的大型库,遇到了一个我不熟悉其调用约定的令人困惑的行。
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]
?较大的循环有问题,但这与布尔索引的“语法”无关。