#Program Block starts
import numpy as np
A= np.array([1, 2, 3, 4, 5])
B= np.array([1, 5, 3, 9, 15] )
# I have a 3*3 matrix
C = [[0 for x in range(3)] for x in range(3)]
C[0][:]=[1,5,3]
C[1][:]=[7,9,15]
C[2][:]=[2,9,15]
flag=(A==B).astype(int) # comparing for equality of 2 arrays A and B, and storing as binary
C_new=np.copy(C)
flag_ind=[i for i, e in enumerate(flag) if e==0] # storing the indices of non differing elements
for x in flag_ind:
C_new[C_new==B[x]]=A[x]
输出为C_new = [1,2,3; 7 4 5; 2 4 5] A和B的实际尺寸约为600000,C的尺寸为4000000 * 4.仿真时间约为14小时..如果有办法以更快的速度进行相同的操作..请让我知道< / p>
答案 0 :(得分:2)
这样,您将遍历整个C数组,与A和B之间的交集重复多次。
我建议创建一个字典,将B值映射到A值,以便您可以在大致恒定的时间内检索每个等效元素。
这就是我所做的,用你指定的相同大小的数组运行需要9秒。
A_dict = dict((k, v) for k, v in zip(B, A) if k != v)
map_c = np.vectorize(lambda x: A_dict.get(x, x))
C_new = map_c(C)
首先,我创建了字典以映射B中具有不同等价物的每个值,然后我创建了将在C数组上使用此字典的函数。