数组重新分类与numpy

时间:2017-07-05 14:04:23

标签: python arrays pandas numpy

我有一个包含10位数字的大型(50000 x 50000)64位整数NumPy数组。阵列中有大约250,000个唯一数字。

我有第二个重分类表,它将第一个数组中的每个唯一值映射到1到100之间的整数。我希望将第一个数组中的值重新分类为第二个数组中的相应值。

我尝试了两种方法,虽然它们有效,但它们很慢。在这两种方法中,我创建了一个相同尺寸的空白(零)数组。

new_array = np.zeros(old_array.shape)

第一种方法:

for old_value, new_value in lookup_array:
    new_array[old_array == old_value] = new_value

第二种方法,其中lookup_array位于pandas数据框中,标题为“Old”和“New:

for new_value, old_values in lookup_table.groupby("New"):
    new_array[np.in1d(old_array, old_values)] = new_value

是否有更快的方法来重新分类值

1 个答案:

答案 0 :(得分:2)

将查找表存储为250,000个元素数组,其中每个索引都具有映射值。例如,如果你有类似的东西:

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]