将numpy数组中的整数转换为连续范围0 ... n [英] Translate integers in a numpy array to a contiguous range 0...n

查看:280
本文介绍了将numpy数组中的整数转换为连续范围0 ... n的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将numpy数组中的任意整数转换为连续范围0 ... n,如下所示:

I would like to translate arbitrary integers in a numpy array to a contiguous range 0...n, like this:

source: [2 3 4 5 4 3]
translating [2 3 4 5] -> [0 1 2 3]
target: [0 1 2 3 2 1]

必须有比以下更好的方法:

There must be a better way to than the following:

import numpy as np

"translate arbitrary integers in the source array to contiguous range 0...n"

def translate_ids(source, source_ids, target_ids):
    target = source.copy()

    for i in range(len(source_ids)):
        x = source_ids[i]
        x_i = source == x
        target[x_i] = target_ids[i]

    return target

#

source = np.array([ 2, 3, 4, 5, 4, 3 ])
source_ids = np.unique(source)
target_ids = np.arange(len(source_ids))

target = translate_ids(source, source_ids, target_ids)

print "source:", source
print "translating", source_ids, '->', target_ids
print "target:", target

这是什么?

推荐答案

IIUC,您只需使用

IIUC you can simply use np.unique's optional argument return_inverse, like so -

np.unique(source,return_inverse=True)[1]

样品运行-

In [44]: source
Out[44]: array([2, 3, 4, 5, 4, 3])

In [45]: np.unique(source,return_inverse=True)[1]
Out[45]: array([0, 1, 2, 3, 2, 1])

这篇关于将numpy数组中的整数转换为连续范围0 ... n的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆