Estoy buscando una solución que me ayudara a hacer el siguiente.

Supongamos que tengo

array = np.array([10, 20, 30, 40, 50])

Me gustaría reorganizar se basa en una entrada de pedidos. Si hay una colección que la función de llamada arrange, sería la siguiente:

newarray = np.arrange(array, [1, 0, 3, 4, 2])
print newarray

    [20, 10, 40, 50, 30]

Formalmente, si la matriz a ser reordenados es m x n, y el «índice» de la matriz es 1 x n, el orden será determinado por la matriz denominada «índice».

Hace numpy tienen una función como esta?

InformationsquelleAutor hlin117 | 2014-10-04

3 Comentarios

  1. 37

    Usted puede simplemente utilizar su «índice» en la lista directamente, como, también, un índice de la matriz:

    >>> arr = np.array([10, 20, 30, 40, 50])
    >>> idx = [1, 0, 3, 4, 2]
    >>> arr[idx]
    array([20, 10, 40, 50, 30])

    Tiende a ser mucho más rápido si idx ya es un ndarray y no un list, incluso a pesar de que va a trabajar de cualquier manera:

    >>> %timeit arr[idx]
    100000 loops, best of 3: 2.11 µs per loop
    >>> ai = np.array(idx)
    >>> %timeit arr[ai]
    1000000 loops, best of 3: 296 ns per loop
    • Gracias! ¿Qué pasa si el «índice» es la matriz 2d? Por ejemplo, quiero pasar [[1,2], ["a", "b"] en [[2,1], ["a", "b"]] mediante el índice [[1,0], [0,1]]. Sé que una fea manera de hacerlo es utilizando para-bucle para volver a organizar cada fila de la matriz mediante la correspondiente fila de índice de la matriz. Pero hay que ser de una manera más rápida.
    • Nota: la indexación de la matriz de idx no puede ser una tupla. Este fue, de alguna manera contra-intuitivo, pero su solución funciona a la perfección. Gracias
  2. 3

    para aquellos cuyo índice es de matriz 2d, usted puede usar la función de mapa.
    Aquí está un ejemplo:

    a = np.random.randn(3, 3)
    print(a)
    print(np.argsort(a))
    
    print(np.array(list(map(lambda x, y: y[x], np.argsort(a), a))))

    la salida es

    [[-1.42167035  0.62520498  2.02054623]
     [-0.17966393 -0.01561566  0.24480554]
     [ 1.10568543  0.00298402 -0.71397599]]
    [[0 1 2]
     [0 1 2]
     [2 1 0]]
    [[-1.42167035  0.62520498  2.02054623]
     [-0.17966393 -0.01561566  0.24480554]
     [-0.71397599  0.00298402  1.10568543]]
  3. 0

    Si quieres hacer algo pero descendente:

    a = np.array([1,2,3,4,5])
    np.argsort(a)
    > array([0, 1, 2, 3, 4])
    np.argsort(-a)
    > array([4, 3, 2, 1, 0])

Dejar respuesta

Please enter your comment!
Please enter your name here