0
votes

Quel est le moyen le plus simple de rechercher une valeur adjacente dans un tableau engourdi structuré d'éléments uniques?

J'ai une matrice numpie structurée avec deux colonnes où les éléments de chaque colonne sont tous uniques. Par exemple: xxx

Je voudrais rechercher une valeur basée sur l'index. Idéalement, un moyen de renvoyer 'B' où l'index est «2», par exemple. C'est la meilleure méthode que j'ai trouvée jusqu'à présent: xxx

Pour que cela soit moins riche à mettre en œuvre, j'ai enveloppé la logique dans une fonction: xxx

Est-ce que quelqu'un sait-il d'une façon de le faire sans tant de code hacky? Ce serait bien sûr, bien sûr, s'il y avait une fonction np.where qui fonctionnait comme ceci, comme np.where (arr ['idx'] == 2, arrêt ['valeur ']) où une seule valeur a été renvoyée et aucune valeur "autre" n'était requise. Merci.


1 commentaires

Pourquoi n'utilisez-vous pas Pandas à la place?


4 Réponses :


0
votes

Si je vous comprends correctement, cela devrait faire l'affaire: xxx pré>

ou dans votre fonction p> xxx pré>

mais honnêtement comme votre La matrice est construite, j'utilise simplement un dictionnaire. Vous pouvez en lire plus sur des dictionnaires ici: P>

HTTPS: / /docs.python.org/2/tatulytial/datratégutructures.html#dicarications p> xxx pré>

et vous pouvez extraire la valeur simplement par: p>

my_dict.values()


0 commentaires

0
votes

Je ne sais pas si NUMPY est nécessaire, mais si ce n'est pas un dictionnaire est idéal: xxx

dans ce dictionnaire, vous pouvez par exemple utiliser numpy.int8 Types de clés, si les types sont la raison de l'utilisation de numpy.


1 commentaires

Vous avez raison, un dictionnaire serait idéal. Mais dans ce cas, tout est entré et sort comme des tableaux numpus et je préfère ne pas convertir à un nouveau type de données simplement pour rechercher une valeur.



0
votes

Si vous allez faire cela plusieurs fois, il est préférable que vous triez le tableau (une fois), puis utilisez np.searchsorte code> sur chaque requête:

import numpy as np

arr = np.array(
    [(1,'a'),(2, 'b'),(3, 'c')], 
    dtype=[('idx', np.int8), ('value', np.unicode_, 16)]
    )
arr_sorted = np.sort(arr)
value = arr_sorted['value'][np.searchsorted(arr_sorted['idx'], 2)]


0 commentaires

1
votes
In [309]: arr[np.where(arr['idx']==4)]['value']                                                              
Out[309]: array([], dtype='<U16')
In [310]: arr[np.where(arr['idx']>1)]['value']                                                               
Out[310]: array(['b', 'c'], dtype='<U16')

1 commentaires

Je pense que tu as cloué, merci. Renvoyer une ligne de données Compte tenu de l'indice est ce que je recherche et beaucoup plus concis que ce que j'ai écrit à l'origine. Je n'utilise pas très souvent des nombres très souvent et je pense que ma question est la preuve :).