代码之家  ›  专栏  ›  技术社区  ›  Demetri Pananos

正在获取numpy数组的索引

  •  1
  • Demetri Pananos  · 技术社区  · 7 年前

    假设我有一张名单

    names = ['Alex','Brad', 'Camilla']

    如果我有一个像

    norder = array([0, 1, 2, 1, 0, 1, 0, 2, 1, 1])

    那我可以用 norder 访问 names

    names[norder]
    
    >>> array(['Alex', 'Brad', 'Camilla', 'Brad', 'Alex', 'Brad', 'Alex',
           'Camilla', 'Brad', 'Brad'], dtype='<U7')
    

    我该怎么倒过来?鉴于

    order= array(['Alex', 'Brad', 'Camilla', 'Brad', 'Alex', 'Brad', 'Alex', 'Camilla', 'Brad', 'Brad'], dtype='<U7')

    姓名 ,如何返回看起来像 ?

    1 回复  |  直到 7 年前
        1
  •  2
  •   cs95 abhishek58g    7 年前

    numpy的一个选项是使用广播比较。

    >>> (np.array(names) == order[:, None]).argmax(1)
    array([0, 1, 2, 1, 0, 1, 0, 2, 1, 1])
    

    虽然速度很快,但缺点是它占用大量内存。

    另一种选择是使用熊猫 Index 应用程序编程接口:

    >>> import pandas as pd
    >>> idx = pd.Index(names)
    >>> idx.get_indexer(order)
    array([0, 1, 2, 1, 0, 1, 0, 2, 1, 1])
    

    这应该更节省内存。