0
votes

Comment étiqueter les entrées d'une matrice comme indices mais gardez toujours leurs valeurs numériques originales?

J'ai une matrice_1 pleine de valeurs numériques et ce que je voudrais faire est de le transformer en matrix_2 avec les valeurs (de matrix_1 triées), puis remplacez ces valeurs triées dans matrice 2 avec les indices d'origine de matrix_1. < p> Je ne veux pas utiliser de boucles car les matrices sont plutôt grandes. xxx

J'ai essayé utiliser np.ndenumérate sur la matrice d'origine mais il renvoie la matrice ( [Objet numpy.ndenumérate à 0x1a1A9Fce90], dtype = objet)

J'ai maintenant essayé NP.argsort () mais cela ne semble pas fonctionner, éventuellement parce que toutes mes entrées sont des flotteurs .. .


0 commentaires

3 Réponses :


0
votes

Utilisation de np.argsort doit faire l'astuce:

[[(i+1,v+1)   for v in enumerate(y)] for i, y in enumerate(x.tolist())]
[[(1, 4), (1, 1), (1, 2), (1, 3)], [(2, 2), (2, 1), (2, 4), (2, 3)]]


0 commentaires

0
votes

Vous devez venir de R ou une autre langue qui commencent à indexer sur 1 code>. Dans Python, les index démarrent à 0 code>, vous devez donc ajouter explicitement + 1 code> sur les index pour les faire démarrer à 1.

Utiliser Argsort code> et ensuite remodeler code> p> xxx pré>

p> xxx pré>

quelle sortie p>

array([[[4, 1],
        [1, 1],
        [2, 1],
        [3, 1]],

       [[2, 2],
        [1, 2],
        [4, 2],
        [3, 2]]])


0 commentaires

0
votes

argsort appliqué sur la matrice aplatie: xxx

tourne dans les indices 2D: xxx

combine les tableaux en un, et remodeler: xxx


0 commentaires