Suite

Choisir au hasard un champ parmi plusieurs champs dans le calculateur de champs d'ArcGIS for Desktop ?


À l'aide du calculateur de champs dans ArcGIS for Desktop, je souhaite choisir au hasard un champ dans une liste de 10 champs (chaînes).

L'équivalent Excel, qui fonctionne, est :=INDICE(A2:J2;rnd()*10+1).

Comment puis-je le faire en VBScript de préférence (ou en Python) ?


En utilisant Python comme analyseur, créez une liste de vos champs, puis utilisez un entier aléatoire comme index pour en extraire un au hasard.

Note 1:Aléatoiremodule doit être importé dans le bloc de code pour s'assurer qu'il est disponible.

Remarque 2 : si vous deviez modifier cela pour plus ou moins de valeurs de champ, ajustez le dernier nombre (indiqué par 9) pour qu'il corresponde à la longueur de la liste moins 1.


Je pense que cela fera simplement l'affaire avec VBScript, en utilisant votre exemple de 10 champs parmi lesquels choisir par index (0-9) :

int (10*rnd)

… et avec un bloc de code Python utilisant numpy :

importer numpy.random en tant que R def getRandom(numFlds): return int(R.random()*numFlds)

Le bloc Python ci-dessus serait appelé par (en utilisant à nouveau un exemple de 10 champs) :

obtenirAléatoire(10)

En étendant un peu cela, disons que vous vouliez utiliser l'index aléatoire généré pour renvoyer les noms de champ réels (au lieu de l'index), alors c'est pratique en utilisant Python (utilise la 1ère couche dans le bloc de données par défaut):

importer numpy.random as R Flds = arcpy.ListFields(arcpy.mapping.ListLayers(arcpy.mapping.MapDocument('CURRENT'), '*')[0]) numFlds = len(Flds) def getRandom(): return Flds [int(R.random()*numFlds)].nom

Bien sûr, si vous calculez cela dans un champ « brouillon » ajouté à la fin du même tableau sur lequel le calcul est basé, et que vous ne souhaitez pas inclure ce champ dans le générateur aléatoire, vous pouvez simplement soustraire le nombre de champs 'draft' de numFlds var avant la déclaration def, c'est-à-dire si un seul champ de texte est ajouté à la fin de la table pour contenir ce calcul (et doit être exclu), alors numFlds = len(Flds) - 1 [au lieu de numFlds = len(Flds)].


Voir la vidéo: ArcGis - Introduction à Python et au Calculateur de champs field caculator (Octobre 2021).