首页 >后端开发 >Python教程 >如何确定 Numpy 数组是否包含特定行?

如何确定 Numpy 数组是否包含特定行?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-21 18:29:021017浏览

How to Determine if a Numpy Array Contains a Specific Row?

查找 Numpy 数组是否包含特定行

使用 Numpy 数组时,有时需要验证特定行是否存在数组内。与标准 Python 列表不同,Numpy 数组提供了独特的细微差别,在执行此类检查时需要专门的方法。

Numpy 数组差异

与 Python 数组不同,Numpy 数组在以下情况下表现出不同的行为:使用 in 运算符测试行是否存在:

<code class="python"># Python Array
a = [[1, 2], [10, 20], [100, 200]]
[1, 2] in a  # True
[1, 20] in a  # False

# Numpy Array
a = np.array([[1, 2], [10, 20], [100, 200]])
np.array([1, 2]) in a  # True
np.array([1, 20]) in a  # True  (Unexpected)</code>

高效方法

要有效检查 Numpy 数组中的行是否存在,请考虑以下方法:

  • .tolist() 转换: 将 Numpy 数组转换为列表,然后在列表上使用 in 运算符:
<code class="python">[1, 2] in a.tolist()  # True
[1, 20] in a.tolist()  # False</code>
  • Numpy 视图: 使用数组的视图快速检查行是否存在:
<code class="python">any((a[:]==[1,2]).all(1))  # True
any((a[:]==[1,20]).all(1))  # False</code>
  • Numpy 上的生成器: 在每行上生成数组并与目标行进行比较:
<code class="python">any(([1, 2] == x).all() for x in a)  # Stops on first occurrence</code>
  • Numpy 逻辑函数: 利用 Numpy 逻辑函数来执行比较:
<code class="python">any(np.equal(a, [1, 2]).all(1))  # True</code>

性能注意事项

这些方法的性能因数组的大小和结构而异。以下是 300,000 x 3 数组的一些计时:

early hit: [9000, 9001, 9002] in 300,000 elements:
    view: 0.01002 seconds
    python list: 0.00305 seconds
    gen over numpy: 0.06470 seconds
    logic equal: 0.00909 seconds

late hit: [899970, 899971, 899972] in 300,000 elements:
    view: 0.00936 seconds
    python list: 0.30604 seconds
    gen over numpy: 6.47660 seconds
    logic equal: 0.00965 seconds

结论

为了在 Numpy 数组中进行有效的行存在检查,建议使用 . tolist()、Numpy 视图或 Numpy 逻辑函数方法。应避免使用生成器方法,因为它的性能开销很大。

以上是如何确定 Numpy 数组是否包含特定行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn