【问题标题】:Array reclassification with numpy使用 numpy 进行数组重新分类
【发布时间】:2017-12-09 06:07:41
【问题描述】:

我有一个包含 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 数据框中:

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

有没有更快的重新分类值的方法

【问题讨论】:

    标签: python arrays pandas numpy


    【解决方案1】:

    将查找表存储为 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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 2014-11-17
      • 2021-04-17
      • 1970-01-01
      相关资源
      最近更新 更多