我有一个包含 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
有没有更快的方法来重新分类值
将查找表存储为包含 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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)