我有两个非常大的numpy数组,它们都是3D的,我需要找到一个有效的方法来检查它们是否重叠,因为首先将它们都转换成集合需要花费太长时间。我尝试使用我在这里找到的另一个解决方案来解决这个相同的问题,但是对于2D数组,我没有成功地使它适用于3D。 以下是2D的解决方案:
nrows, ncols = A.shape
dtype={'names':['f{}'.format(i) for i in range(ndep)],
'formats':ndep * [A.dtype]}
C = np.intersect1d(A.view(dtype).view(dtype), B.view(dtype).view(dtype))
# This last bit is optional if you're okay with "C" being a structured array...
C = C.view(A.dtype).reshape(-1, ndep)
(其中A和B是2D阵列) 我需要找到重叠的numpy数组的数量,但不是具体的数组。你知道吗
我们可以利用
views
使用一个助手函数,我在几个Q&a中使用过这个函数。为了得到子阵列的存在,我们可以在视图上使用np.isin
,或者使用一个更费劲的np.searchsorted
。你知道吗方法#1:使用
np.isin
-方法#2:我们也可以利用
np.searchsorted
在views
-所以,这两个解给出了
a
在b
中每个子阵的存在性。因此,要获得所需的计数,它将是-isin_nd(a,b).sum()
或isin_nd_searchsorted(a,b).sum()
。你知道吗样本运行-
大型阵列上的计时-
相关问题 更多 >
编程相关推荐