假设我有一个形状为A
的数组(M, K)
和另一个形状为B
的{{1}}。
(N, K)
的行是可以遇到的所有可能模式(因此每个模式都是大小为B
的1D数组)。
因此,我希望获得一个K
形状的数组C
,其中(M,)
是行C[i]
的模式(B
)的指示在i
。
我目前正在循环中执行此操作(即循环遍历所有可能的模式)但我最终会使用矢量化。
以下是一个例子:
A
我期待:
A = np.array([[0, 1], [0, 1], [1, 0]])
B = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
答案 0 :(得分:1)
基于this solution
,这是使用np.searchsorted
-
dims = B.max(0)+1
A1D = np.ravel_multi_index(A.T,dims)
B1D = np.ravel_multi_index(B.T,dims)
sidx = B1D.argsort()
out = sidx[np.searchsorted(B1D,A1D,sorter=sidx)]
示例运行 -
In [43]: A
Out[43]:
array([[72, 89, 75],
[72, 89, 75],
[93, 38, 61],
[47, 67, 50],
[47, 67, 50],
[93, 38, 61],
[72, 89, 75]])
In [44]: B
Out[44]:
array([[47, 67, 50],
[93, 38, 61],
[41, 55, 27],
[72, 89, 75]])
In [45]: out
Out[45]: array([3, 3, 1, 0, 0, 1, 3])