2017-09-07 235 views
0

内比较数组元素我有一个numpy的阵列numpy的:另一个阵列

X = [[1,2], [3,4], [5,6], [1,2], [5,6]] 

我想要一个numpy的阵列Y = [1, 2, 3, 1, 3],其中[1,2]1取代,[3,4]取代2等。这是一个非常大的(数以百万计)X.

直觉是Y[X == [1,2]] = 1。但这没有用。

+0

如何/那些人在那里搜索模式:'[1,2]' ,'[3,4]'等存储?或者你只有两种这样的模式? – Divakar

+0

你有一个2D列表,并且在python级别,这很简单,但是既然你标记了'numpy',如果你的意思是'X'应该是一个numpy数组,那么这是不可能的。我的意思是你不能将2d数组转换成不确定的形状数组。 – Kasramvd

+0

好点 - 我会改变这个问题,以表明它是一个numpy数组。搜索模式可以存储在一个单独的数组中,如果需要的话 - 那些数量很少(如20) –

回答

0

直觉是Y[X == [1,2]] = 1。但这没有用。

下面是如何使其工作:

Y = np.empty(len(X), dtype=np.int) 
Y[np.all(X == [1, 2], 1)] = 1 

处理所有可能的值:

s = set(map(tuple, X)) 
r = np.arange(1, len(s) + 1) # or assign whatever values you want 
cond = [np.all(X == v, 1) for v in s] 
Y = np.dot(r, cond)