方法#1:循环使用数组数据
一种方法是提取数组中的键和值,然后使用类似的循环-
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 largenp.arrays。所以,如果
mapping字典保持不变,这一步得到阵列版本-
k并且
v是一次性的安装过程。
方法2:使用searchsorted
建议使用
np.searchsorted-
sidx = k.argsort() #k,v from approach #1k = k[sidx]v = v[sidx]idx = np.searchsorted(k,input_array.ravel()).reshape(input_array.shape)idx[idx==len(k)] = 0mask = k[idx] == input_arrayout = np.where(mask, v[idx], 0)
方法#3:使用整数数组的映射数组进行矢量化的方法
可以使用整数数组的映射数组来建议使用向量化的数组,当由输入数组索引时,会将其直接引向最终输出-
mapping_ar = np.zeros(k.max()+1,dtype=v.dtype) #k,v from approach #1mapping_ar[k] = vout = mapping_ar[input_array]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)