我有一个带有n行的多维数组q和一个带有n行的另一个多维数组q2。这些数组包含相同的行,但顺序不同。如何获得2个数组的匹配列表/数组?示例如下:
q=array([a,b,c,d], #row 1
[e,f,g,h], #row 2
[i,l,m,n]) #row 3
q2=array([e,f,g,h], #row 2
[a,b,c,d], #row 1
[i,l,m,n]) #row 3
q_index=[1,2,3]
q2_index=? #I know is [2,1,3] but I can I get it?
我需要创建索引的q列表/数组以及索引的关联q2列表/数组列表。 谢谢
答案 0 :(得分:0)
您可以使用此代码,但请注意它具有二次运行时。根据您当前的数据结构,多项式是最好的。并且首先将其转换为不同的数据结构对于小n
可能是无效的。如果速度更快或者使用哈希表,它将取决于n
的大小。鉴于数组中的值是浮点数,您必须特别小心:
def compFloatLists(l1, l2, epsilon=0.0001):
if len(l1) != len(l2):
return False
for e1, e2 in zip(l1, l2):
if abs(e1-e2) > epsilon:
return False
return True
q2_index = []
for e1 in q2:
for i, e2 in enumerate(q1):
if compFloatLists(e1, e2):
q2_index.append(q_index[i])
break
作为不相关的旁注:您可能希望将q_index
重命名为q_indices
,这会让您的代码更容易理解恕我直言。
答案 1 :(得分:0)
首先将q
转换为字典,首先将项目转换为元组,然后将它们用作键,并使用索引作为值。
>>> q = [['a','b','c','d'], ['e','f','g','h'], ['i','l','m','n']]
>>> q2 = [['e','f','g','h'], ['a','b','c','d'], ['i','l','m','n']]
>>> q_dict = {tuple(x):i for i, x in enumerate(q, 1)}
>>> [q_dict[tuple(item)] for item in q2]
[2, 1, 3]