Wie wählt man in Fortran am besten zufällig ein Element ungleich Null aus einem Array aus?

Smog

Ich habe ein 1D-Array von ganzen Zahlen mit einem Wert ungleich Null bei einigen Indizes, der Rest ist Null. Der Wert ungleich Null ist gleich dem Index. Z.B:

CHOOSEARRAY = (/0,0,0,4,0,6,7/)

Ich möchte zufällig ein beliebiges Element ungleich Null aus diesem Array auswählen. In diesem Fall möchte ich, dass die Ausgabe mit gleicher Wahrscheinlichkeit entweder 4,6 oder 7 beträgt.

Mein derzeitiger Ansatz ist etwas verworren und funktioniert wie folgt:

Zählen Sie die Anzahl der verfügbaren Auswahlmöglichkeiten

NCHOICE = COUNT(CHOOSEARRAY.NE.0)

Erstellen Sie ein Array und füllen Sie es mit den Werten ungleich Null

ALLOCATE(CHOICES(NCHOICE))
CHOICES = PACK(CHOOSEARRAY,CHOOSEARRAY.NE.0)

Wähle ein zufälliges Element aus diesem neuen Array

CHOSENVAL = CHOICES(FLOOR(1+GRND()*NCHOICE))

GRND() ist hier eine Zufallszahlenerzeugungsfunktion, die eine reelle Zahl gleichmäßig zwischen 0 und 1 verteilt ausgibt.

Dieser Codeblock muss mehrmals wiederholt werden, was mehrere Zuweisungs- und Aufhebungsoperationen erfordert, die zeitaufwändig sein können. Gibt es einen besseren Weg, dieses Problem anzugehen?

Gibt es alternativ eine Möglichkeit, den Index eines zufällig ausgewählten Elements ungleich Null zurückzugeben? Zum Beispiel sollte (/0,1,1,0,0,1/) mit gleicher Wahrscheinlichkeit entweder 2,3 oder 6 ergeben.

Hochleistungszeichen

Wenn Sie keine Angst vor ein paar Divisionen durch Null haben, könnte dies ansprechen. Lassen Sie uns zuerst einige Zufallszahlen haben ...

REAL, DIMENSION(SIZE(choosearray)) :: rands
CALL RANDOM_NUMBER(rands)

dann können wir die Position eines zufälligen Elements ungleich Null choosearraymit dem Ausdruck

MAXLOC(rands * choosearray/choosearray)

und erhalte dann seinen Wert mit

choosearray(MAXLOC(rands * choosearray/choosearray))

Ich überlasse es Ihnen, die Geschwindigkeit zu testen.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Wie wählt man zufällig ein Element aus einem Array aus, das zuvor in JavaScript nicht ausgewählt wurde?

wie man zufällig ein Element aus einem Array mit der geringsten Wahrscheinlichkeit auswählt

Prolog: Wie wählt man ein Element aus einer Liste ungleichmäßig zufällig aus?

Wie wähle ich zufällig ein Element aus einem Array mit 1000 Elementen aus?

Wie wählt man ein zufälliges Element aus einem Array aus, das in einer Schnittstellendatei gespeichert ist?

Wie wählt man ein Element in einem anderen Element aus?

So wählen Sie am besten zufällig einige Nicht-Null-Elemente aus einem Array mit vielen sich wiederholenden Ganzzahlen aus

Wie wählt man zufällig aus der Textliste aus?

So wählen Sie ein Element zufällig aus einem Array aus

Wie wähle ich zufällig aus einem Array aus?

Wie wählt man jedes Mal ein neues oder einzigartiges zufälliges Element aus einer Array-Liste in Android aus?

Wie wählt man ein Objekt in einem Array aus, das ein Element hat, das einem Feld des besitzenden Dokuments entspricht?

Wie wählt man in Rails ein Element aus einem Array aus, das Teil eines Parameter-Hash ist?

Wie man zufällig ein Paar Elemente aus einem 2d Array (Java) erhält

Wie man zufällig ein Audio aus einem MP3-Array mit Javascript abspielt

Wie wählt man zufällig ein ausgewähltes Element in der Dropdown-Liste aus, das zuvor in JavaScript nicht ausgewählt wurde?

Wie wählt man in Python am effizientesten bestimmte Monate aus einem Datetime-Array aus?

Wie kann ich zufällig ein Element aus einem Vektor oder Array auswählen?

Wie wählt man eine zufällige Zeichenfolge aus einem Array aus?

Wie wählt man ein einzelnes Feld aus einem Array von Json-Objekten aus?

Wie wählt man Daten aus einem Array aus und erstellt daraus ein einzelnes Objekt?

Wie wähle ich ein Objekt aus einem Array mehrmals zufällig aus und speichere es in einem Array?

Wählen Sie zufällig ein Element in einem Array aus und drucken Sie 2 verschiedene Elemente aus dem Array

Wie wählt man ein Element mit einem einzelnen Klassennamen in Jquery aus?

Wie wählt man ein Element basierend auf einem Stilwert aus?

Oracle SQL: Wie wählt man am besten eine Teilmenge einer sehr großen Tabelle aus?

Pandas: Wie wählt man am besten Funktionen aus, die nicht korreliert sind?

Wie wählt man ein Element mit querySelector aus?

Wie wähle ich ein zufälliges Element aus einem gewichteten Array in Julia aus?

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv