实际的问题出在某些机器学习应用程序中,并且数据变得有些复杂。因此,这是捕获问题本质的MWE:
我有两个数组,如下所示:
L = np.arange(12).reshape(4,3)
M = np.arange(12).reshape(6,2)
现在,我想找到R in中的行L
,这样就存在其中的行,M
其中由R中除最后一个元素之外的所有元素组成。
从上面的示例代码,L
并且M
看起来就像这样:
array([[ 0, 1, 2], # L
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
array([[ 0, 1], # M
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11]])
我想从中将标记的行L
作为numpy数组:
array([[ 0, 1, 2],
[ 6, 7, 8]])
如果我是代表L
和M
为蟒蛇名单,我会做这样的:
L = [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]
M = [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10, 11]]
answer = [R for R in L if R[:-1] in M]
现在,我知道我可以在numpy中使用类似的列表推导并将结果转换为数组,因为numpy非常出色,可能有一种我不知道的更优雅的方法。
我尝试调查np.where
(以获取所需的索引,然后可以将L代入其中),但这似乎并没有满足我的需求。
我将不胜感激
>>> import hashlib
>>> fn = lambda xs: hashlib.sha1(xs).hexdigest()
>>> m = np.apply_along_axis(fn, 1, M)
>>> l = np.apply_along_axis(fn, 1, L[:,:-1])
>>> L[np.in1d(l, m)]
array([[0, 1, 2],
[6, 7, 8]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句