python - 在另一个包含多个二维数组的数组中查找二维数组的最快方法

标签 python numpy performance

您好,我正在尝试在包含多个二维数组的数组中执行搜索操作,将其元素与特定数组进行比较。我设法使用 for 循环遍历大数组中的 itens 来做到这一点,但我必须执行此搜索 10^6 次,并且此 for 循环的长度可以增长到 2^100,因此它变得非常耗时。我想知道是否有一种方法可以使用 np.where 或 np.isin() 函数加快搜索速度。

这是慢速工作方法的一个例子

import numpy as np

frequencies = {}
b = np.array ([[0, 0, 0], [0, 0, 0], [1, 1, 1]]) #template

a = np.array([[[1, 1, 1], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [1, 1, 1], [0, 0, 0]],[[0, 0, 0], [0, 0, 0], [1, 1, 1]],[[0, 0, 1], [0, 0, 1], [0, 0, 1]],[[0, 1, 0], [0, 1, 0], [0, 1, 0]],[[1, 0, 0], [1, 0, 0], [1, 0, 0]]])

#I need to know if b is inside a and the index where it its located
for I in range (a): 
     if np.all(b==a[I]):
          frequencies [I] = frequencies [I] + 1

我想做这样的事情。我需要将在 a 中找到 b 的索引存储在字典 frequencies/的索引 c 中p>

import numpy as np

frequencies = {}
b = np.array ([[0, 0, 0], [0, 0, 0], [1, 1, 1]]) #template

a = np.array([[[1, 1, 1], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [1, 1, 1], [0, 0, 0]],[[0, 0, 0], [0, 0, 0], [1, 1, 1]],[[0, 0, 1], [0, 0, 1], [0, 0, 1]],[[0, 1, 0], [0, 1, 0], [0, 1, 0]],[[1, 0, 0], [1, 0, 0], [1, 0, 0]]])

c = np.where(np.all(b==a))

frequencies [c] = frequencies [c] + 1

最佳答案

您可以将 NumPy.all 与双轴一起使用,然后使用 NumPy.argwhere 查找索引,如下所示:

b = np.array ([[0, 0, 0], [0, 0, 0], [1, 1, 1]])

a = np.array([[[1, 1, 1], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [1, 1, 1], [0, 0, 0]],[[0, 0, 0], [0, 0, 0], [1, 1, 1]],[[0, 0, 1], [0, 0, 1], [0, 0, 1]],[[0, 1, 0], [0, 1, 0], [0, 1, 0]],[[1, 0, 0], [1, 0, 0], [1, 0, 0]]])

np.all(b == a, axis=(-1))
# array([[False,  True, False],
#        [ True, False, False],
#        [ True,  True,  True],
#        [False, False, False],
#        [False, False, False],
#        [False, False, False]])

np.all(b == a, axis=(-1,1))
# array([False, False,  True, False, False, False])

indexs = np.argwhere(np.all(b == a, axis=(-1, 1)))

输出:

>>> indexs
array([[2]])

关于python - 在另一个包含多个二维数组的数组中查找二维数组的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71721736/

相关文章:

python - 测试发现: list all tests in a format suitable for copy/paste

python - 模型 django 中唯一随机默认值的迁移问题

python - 面板 + 参数 : FileInput widget and @param. 取决于交互

python - 如何对列表列表进行排序并仅保留每个第一个元素的最大第二个元素?

database - 分布式架构中的 OrientDB 是否可以跨服务器进行顶点复制?

node.js - 5 秒未加载,heroku node.js 应用加载缓慢

python - XmlHttpRequest 请求元素为 None

python - 如何有效地计算 numpy 数组中每个单元格的函数?

python - 获取 numpy 数组中第 k 个维度的第 i 个切片

Javascript - 返回值或使用回调函数