通过 Numpy 的Where函数使用多个条件访问数组元素
在 NumPy 中使用数组时,通常需要有选择地访问基于在特定条件下。 where() 函数在这种情况下起着至关重要的作用,允许灵活选择满足给定条件的元素。
但是,如果 where() 的期望行为偏离预期,就会出现实例,从而导致错误或意想不到的结果。了解此函数的细微差别对于在 NumPy 中进行有效的数组操作至关重要。
考虑以下代码片段:
<code class="python">dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
此代码旨在选择指定范围内的距离 [r, r博士]。但是,它仅捕获满足第二个条件 dists <= r dr 的元素。要纠正此问题,您可以将两个条件转换为单个条件或使用花式索引:
<code class="python">dists[abs(dists - r - dr/2.) <= dr/2.]
<code class="python">dists[(dists >= r) & (dists <= r+dr)]
原始代码中的问题源于 where() 的错误使用。与布尔数组不同,where() 返回索引列表。通过 和 组合两个索引列表会产生第二个列表,有效地覆盖第一个条件。
为了进一步清晰,请考虑以下内容:
<code class="python">a = np.where(dists >= r) b = np.where(dists <= r + dr)
a 和 b 的结果产生 b 。要获得正确的布尔数组,您需要使用按元素 & 运算符组合条件:
<code class="python">dists >= r & dists <= r + dr
布尔数组可用后,您可以利用它进行数组选择:
<code class="python">dists[dists >= r & dists <= r + dr]</code>
以上是如何正确使用Numpy的where函数进行多条件数组元素访问?的详细内容。更多信息请关注PHP中文网其他相关文章!