您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

根据字典有效地替换数组中的元素-NumPy / Python

根据字典有效地替换数组中的元素-NumPy / Python

一种方法提取数组中的键和值,然后使用类似的循环-

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]
python 2022/1/1 18:34:58 有230人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶