10
votes

Comment utiliser des tableaux MATLAB comme clé de l'objet HASHMAP Java?

La fonction de mise fonctionne bien, mais la fonction GET ne le fait pas. Apparemment, je ne connais pas l'astuce. XXX

J'ai cherché et lire de nombreux postes mais je n'ai pas trouvé de solution à ce problème. Ce serait bien si quelqu'un peut me laisser savoir le tour.


0 commentaires

4 Réponses :


1
votes

Je ne pense pas que vous puissiez utiliser des vecteurs numériques ou des matrices comme des clés dans un hashmap Java. Vous devez plutôt convertir le vecteur ou la matrice en une seule clé unique, telle qu'une représentation unique de chaîne de caractères des valeurs dans le vecteur ou la matrice. Il y a quelques façons de faire ceci:

  • pour les tableaux entier, vous pouvez utiliser le Char fonctionner pour convertir les entiers en représentations équivalentes ASCII, créant ainsi une chaîne de caractères. Cela ne fonctionnera efficacement que pour les valeurs entières entre 0 et 65535, étant donné que tout en dehors de cette plage aura probablement un comportement non défini. Voici un exemple: P>

    keyValue = reshape(dec2bin(X(:),64)',1,[]);
    


2 commentaires

Merci. Cela fonctionne pour les intrants entier. Y a-t-il de toute façon pour générer des objets Java à partir de malab matrices? (E.g 1: .1: 3) La fonction Char fonctionne également sur eux, mais je pense que cela ignore simplement les parties non entière.


Merci encore. Cela fonctionne assez bien, bien que ce soit très lent. La raison pour laquelle j'ai fini par faire est que j'essaie de mettre en œuvre un * algorithme efficace à Matlab. Par conséquent, j'utilise des objets Java pour un accès rapide, mais il semble que je suis mieux désactivé, écrivez un code C ++ et mez-vous. La prise est, j'aimerais avoir un * aussi flexible que possible. Par exemple, recevez toutes les spécifications de domaine de recherche comme fonctions d'entrée.



-1
votes

Si vous utilisez une version plus récente de Matlab (2008b ou plus tard, je pense) alors Matlab a sa propre classe de cartes qui fonctionne pour certains types de clés. Voir la documentation: CONTENANTS.MAP


1 commentaires

Malheureusement, les conteneurs dans Matlab ne supportent pas les matrices.



6
votes

Je pense que le problème est que les réseaux primitifs Java ne fournissent pas les mêmes égaux () et HASHCODE () pour vous. Ils utilisent les méthodes d'objet standard comparant par l'identité d'objet au lieu de valeurs contenues. Lorsque vous utilisez des matrices Nonscalar sous forme de clés dans un hashmap, Matlab les convertira en double [], mais ils seront distincts Java Objecs, de sorte qu'ils obtiendront ce comportement.

Si vous avez enveloppé vos valeurs de matrice dans un objet Java qui Comportement à valeur fournie pour les égaux () et HashCode () avant de les utiliser comme des clés, cela pourrait fonctionner. Heureusement, Java.Util.Arrays fournit des implémentations par valeur pour les matrices primitives. Nous devons juste les gifler dans une classe wrapper qui fournit l'interface que HASHMAP s'attend à s'attendre. P>

>> scratch_array_keyed_hashmap
gotBack =
my value


0 commentaires

0
votes

Les structures MATLAB fournissent une recherche très rapide des touches alphanumériques (puits, [A-ZA-Z] [A-ZA-Z_0-9] * Correspondance); À défaut, si vous essayez de hacher de chiffres, je suggérerais d'utiliser des tableaux rares avec le doublage de la matrice; Laissez l'arrayvalue pointer vers l'index dans tout ce que vous essayez de rechercher. htth


0 commentaires