替换矩阵中的元素(需要帮助才能更快)
Replace elements in a matrix (Need help to make this faster)
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 小时..如果有办法以更快的速度执行相同的操作..请告诉我
这样,您迭代整个 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 中在 A 上具有不同等值的每个值,然后我创建了将在 C 数组上使用该字典的函数。
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 小时..如果有办法以更快的速度执行相同的操作..请告诉我
这样,您迭代整个 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 中在 A 上具有不同等值的每个值,然后我创建了将在 C 数组上使用该字典的函数。