繁体   English   中英

在另一个包含多个二维 arrays 的数组中找到二维数组的最快方法

[英]Fastest way to find a 2d array inside another array that holds multiple 2d arrays

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

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

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

我想做这样的事情。 我需要存储在字典频率的索引c中的a中找到b的索引

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

Output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM