6
votes

Conversion de mathématica liste des valeurs dans la liste booléenne

Tout d'abord, désolé pour le titre confus.

Ce que je veux faire est de convertir {1, 4, 9} code> à: p> xxx Pré>

C'est-à-dire que seuls les index de la première liste auront une valeur true code>, le reste sera false code>. p>

Je sens Est une solution vraiment simple, mais je suis assez nouveau à la fois à Mathematica et à la programmation fonctionnelle. Je pourrais le faire itérativement, dans une boucle, mais il doit y avoir quelque chose qui fonctionne avec la liste dans son ensemble. Droit? :) p>

Merci pour votre aide. P>


EDIT: STRUT> Pour montrer que j'ai essayé de faire quelque chose avant que je demande, voici mes progrès si loin : p> xxx pré>

Malheureusement, cela ne fonctionne pas avec {1,4,9} -> Â true code>, mais fonctionnerait avec {1 -> True, 4 -> True, 9 -> True} Code>. Mais je ne sais pas comment arriver à cela ... p>


EDIT 2: strong> obtenu. P>

ReplacePart[Table[False, {x, Max[first]}], Table[x -> True, {x, first}]]


0 commentaires

3 Réponses :


13
votes

Voici une approche simple:

convertIndices@{1, 4, 9}
Out[2]= {True, False, False, True, False, False, False, False, True}


5 commentaires

Liste [[PREMIER]] = TRUE Jamais survenu pour moi. C'est la chose que je cherche. :) Simple, beau. Merci!


Je l'ai écrit ci-dessus comme une fonction commode pour que tout ce que vous avez à faire est de passer une liste. S'il vous plaît voir mon édition.


+1, certains modes de pensée sont persistants et je n'aurais jamais envisagé Liste [[premier]] = true car je ne pense pas à définir des éléments individuels d'une liste .


Et bien sûr, il y a une chance de me rattraper. : P


Maintenant, tout ce que j'ai besoin de faire est de me débarrasser de M.Wizard et je serai au sommet de la balise pour ce mois: D



2
votes

En fait, j'aurais utilisé la réponse de Yoda moi-même, mais voici une alternative: xxx

ou celui-ci: xxx

Les deux ont L'avantage qu'ils ignorent l'étape d'initialisation CONDUCTARRAY de YODA.


2 commentaires

Je ne l'appellerais pas vraiment un avantage . Essayez premier = {1,4,10 ^ 6} . Sur ma machine, vos solutions prennent respectivement ~ 2 et ~ 1,5S, alors que la mine ne prend que ~ 0,035.


@Yoda je ne parlais pas de vitesse d'exécution mais je ne parlais pas de taper des efforts ;-)



8
votes

J'utiliserais SPARSARRAY code> pour cette opération. À mon avis, il est très facile de comprendre, et il est également efficace, en particulier lorsqu'un faible pourcentage d'indices est vrai.

#==1 & /@ SparseArray[List /@ true -> 1]


0 commentaires