替换矩阵中的元素(需要帮助以加快速度)

时间:2015-07-18 22:56:43

标签: python python-3.x numpy multiprocessing mpi

C由数组B的元素组成,我想改变对应于A

的每个元素
#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>

1 个答案:

答案 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数组上使用此字典的函数。