2016-05-27 246 views
2

我正在寻求帮助来改进我的代码。我有两个不同大小的数组,我将一个数组的值分配给另一个数组的索引。 例如如何匹配两个数组的元素并返回值

a = np.array([[1,5],[2,8],[3,2],[4,6]]) 
b = np.array([[1],[1],[2],[4],[4],[2],[3],[2],[3]]) 

即时mathching在第一列然后从分配的到B中的对应的行的第二列中的值的项目。

c = np.zeros([len(b),1]) 
for i in tqdm(range(len(b))): 
    for j in range(len(a)): 
     if b[i,0]==a[j,0]: 
      c[i] = a[j,1] 

返回

c = [[5],[5],[8],[6],[6],[8],[2],[8],[2]] 

的问题是我有一个非常大的数据集和for循环需要很长的时间来运行。任何建议将不胜感激。谢谢。

+1

你使用哪种语言? –

+0

[codereview.se]用于需要优化的工作代码。 –

+0

对不起,我正在使用python –

回答

1

a格式为[[1, ...], [2, ...], [3, ...], ...]

如果是这样,那么您可以通过不重复通过a来节省时间,而只是索引到它。例如:

a = np.array([[1,5],[2,8],[3,2],[4,6]]) 
b = np.array([[1],[1],[2],[4],[4],[2],[3],[2],[3]]) 

c = np.array([[a[i[0] - 1][1]] for i in b]) 
# c = [[5], [5], [8], [6], [6], [8], [2], [8], [2]] 

这将需要的b时间大小,而不是a倍大小的b时间的大小顺序的顺序。

+0

谢谢。这是我正在寻找的。 –

相关问题