k = np.array(list(mapping.keys()))
v = np.array(list(mapping.values()))
out = np.zeros_like(input_array)
for key,val in zip(k,v):
out[input_array==key] = val
与原始数据相比,此数据的好处是用于高效数据提取的数组数据的空间局部性,该空间局部性可用于迭代中。
另外,由于您提到thousand large np.arrays
。所以,如果mapping
字典保持不变,这一步得到阵列版本-k
并且v
是一次性的安装过程。
建议使用np.searchsorted
-
sidx = k.argsort() #k,v from approach #1
k = k[sidx]
v = v[sidx]
idx = np.searchsorted(k,input_array.ravel()).reshape(input_array.shape)
idx[idx==len(k)] = 0
mask = k[idx] == input_array
out = np.where(mask, v[idx], 0)
可以使用整数数组的映射数组来建议使用向量化的数组,当由输入数组索引时,会将其直接引向最终输出-
mapping_ar = np.zeros(k.max()+1,dtype=v.dtype) #k,v from approach #1
mapping_ar[k] = v
out = mapping_ar[input_array]