代码之家  ›  专栏  ›  技术社区  ›  sds Niraj Rajbhandari

numpy/python中的向量替换[duplicate]

  •  2
  • sds Niraj Rajbhandari  · 技术社区  · 6 年前

    给定两个向量 v=['a','b','c'] i=np.random.randint(len(v),size=10) ,我可以得到“替换”向量

    vi = [v[i[x]] for x in range(len(i))]
    

    例如。, vi

    ['a', 'a', 'c', 'c', 'b', 'a', 'c', 'a', 'c', 'a']
    

    如果

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

    有没有 小精灵 为这个做手术?

    1 回复  |  直到 6 年前
        1
  •  6
  •   user3483203    6 年前

    您可以简单地使用numpy索引(注意,您需要转换 v 到A numpy.array 要使其生效:

    v = np.array(['a','b','c'])
    i = np.random.randint(len(v),size=10)
    
    >>> v[i]
    array(['c', 'b', 'a', 'b', 'c', 'b', 'a', 'a', 'b', 'b'], dtype='<U1')
    

    计时

    In [26]: i = np.random.randint(len(v),size=1000000)
    
    In [27]: %timeit [v[i[x]] for x in range(len(i))]
    554 ms ± 6.41 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
    
    In [28]: %timeit v[i]
    4.85 ms ± 12.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    
    In [29]: %timeit [v[s] for s in i]
    505 ms ± 1.95 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)