Python 用numpy进行数组重分类
我有一个包含10位数字的大(50000 x 50000)64位整数NumPy数组。阵列中大约有250000个唯一数字 我有第二个重新分类表,它将第一个数组中的每个唯一值映射为1到100之间的整数。我希望将第一个数组中的值重新分类为第二个数组中的相应值 我尝试过两种方法,虽然它们有效,但速度非常慢。在这两种方法中,我都创建了相同维度的空白(零)数组Python 用numpy进行数组重分类,python,arrays,pandas,numpy,Python,Arrays,Pandas,Numpy,我有一个包含10位数字的大(50000 x 50000)64位整数NumPy数组。阵列中大约有250000个唯一数字 我有第二个重新分类表,它将第一个数组中的每个唯一值映射为1到100之间的整数。我希望将第一个数组中的值重新分类为第二个数组中的相应值 我尝试过两种方法,虽然它们有效,但速度非常慢。在这两种方法中,我都创建了相同维度的空白(零)数组 new_array = np.zeros(old_array.shape) 第一种方法: for old_value, new_value in l
new_array = np.zeros(old_array.shape)
第一种方法:
for old_value, new_value in lookup_array:
new_array[old_array == old_value] = new_value
第二种方法,其中lookup_数组位于标题为“Old”和“New”的数据帧中:
是否有一种更快的方法来重新分类值将查找表存储为250000个元素的数组,其中每个索引都有对应的值。例如,如果您有以下内容:
lookups = [(old_value_1, new_value_1), (old_value_2, new_value_2), ...]
然后你可以做:
idx, val = np.asarray(lookups).T
lookup_array = np.zeros(idx.max() + 1)
lookup_array[idx] = val
当您获得该值时,您可以简单地获得转换后的数组,如下所示:
new_array = lookup_array[old_array]
new_array = lookup_array[old_array]