Frage:
Wie kann man aus einer diskreten Verteilung abtasten?
Barry
2013-08-21 01:40:40 UTC
view on stackexchange narkive permalink

Angenommen, ich habe eine Verteilung, die das mögliche Ergebnis einer einzelnen Zufallsvariablen X regelt. Dies ist ungefähr [0.1, 0.4, 0.2, 0.3], wobei X ein Wert von 1, 2, 3, 4 ist.

Ist es möglich, aus dieser Verteilung eine Stichprobe zu erstellen, dh Pseudozufallszahlen für jedes der möglichen Ergebnisse zu generieren, wenn die Wahrscheinlichkeit dieses Ergebnisses gegeben ist. Wenn ich also wissen wollte, wie hoch die Wahrscheinlichkeit ist, eine 2 zu erhalten, gibt die Stichprobenoperation möglicherweise 0,34 oder ähnliches zurück.

Der Grund, den ich frage, ist, dass ich versuche, eine Aktionsauswahlrichtlinie für zu implementieren eine Lernmethode zur Verstärkung, die auf einem Forschungsbericht basiert. Nach dem, was ich aus der Arbeit entnehme, kann der Autor die Verteilung abtasten, indem er "die Gleichverteilung U [0,1] durch kumulative Wahrscheinlichkeitsdichtefunktionen abbildet, die durch adaptive numerische Integration erhalten werden". Daraus tastet er dann die Übergangswahrscheinlichkeiten für jeden Versuch ab ...

Ich wäre für jede Information zu diesem Thema dankbar ...

Vielen Dank im Voraus

Es gibt eine Vielzahl von Methoden zum Abtasten diskreter Wahrscheinlichkeitsverteilungen. Das Papier verwendet das cdf (erzeugen Sie eine Uniform, $ U = u $ on (0,1), wenn $ u <0,1 $ Ausgabe "1" ist, wenn es $ <0,1 + 0,4 $ Ausgabe "2" ist und so weiter). Es gibt weitaus effizientere Methoden, wenn es um Geschwindigkeit geht (z. B. wenn Sie Milliarden Mal probieren möchten).
@Glen_b Könnten Sie bitte effizientere Methoden für die Abtastung eines diskreten Wohnmobils nennen? Das ist sehr interessant.
@Riga siehe meine Antwort unten
Es gibt einen schönen Artikel, der die "Alias-Methode" hier erklärt: http://www.keithschwarz.com/darts-dice-coins/
Fünf antworten:
jtobin
2013-08-21 02:19:57 UTC
view on stackexchange narkive permalink

Sicher. Hier ist eine R-Funktion, die aus dieser Verteilung n mal mit Ersetzung abgetastet wird:

  sampleDist = function (n) {sample (x = c (1,2, 3,4), n, ersetzen = T, prob = c (0,1, 0,4, 0,2, 0,3))} # > sampleDist (10) # [1] 4 2 2 2 2 2 4 1 2 2  

Wenn Sie eine etwas niedrigere Ebene wählen möchten, können Sie den tatsächlich verwendeten Algorithmus sehen, indem Sie die R-Quelle (in C geschrieben) überprüfen:

  / * Stichproben mit ungleicher Wahrscheinlichkeit ;; mit Ersatzfall * n sind die Längen von p und perm. p enthält Wahrscheinlichkeiten, perm * enthält die tatsächlichen Ergebnisse und ans enthält ein Array von Werten *, die abgetastet wurden. * / static void ProbSampleReplace (int n, double * p, int * perm, int nans, int * ans) {double rU; int i, j; int nm1 = n - 1; / * Elementidentitäten aufzeichnen * / für (i = 0; i < n; i ++) perm [i] = i + 1; / * sortiere die Wahrscheinlichkeiten in absteigender Reihenfolge * / revsort (p, perm, n); / * kumulative Wahrscheinlichkeiten berechnen * / für (i = 1; i < n; i ++) p [i] + = p [i - 1]; / * berechne die Stichprobe * / für (i = 0; i < nans; i ++) {rU = unif_rand (); für (j = 0; j < nm1; j ++) {if (rU < = p [j]) break; } ans [i] = perm [j]; }}  
Ok, ich verstehe jetzt, was passiert. Vielen Dank für alle Antworten. Ich hoffe wirklich, dass dies jemand anderem hilft. Ich wünschte, ich hätte alle richtigen Antworten auswählen können. Danke an alle
Warum müssen Sie die diskrete Verteilung sortieren?
@PavithranIyer Ich habe es auch nicht gesehen (oder auch nicht gesehen).Vielleicht ist es ein Optimierungsversuch: Wenn Sie zuerst auf die größeren Wahrscheinlichkeiten testen, können Sie häufiger früh in der Schleife anhalten.Aber ich bezweifle, dass sich die Kosten für die erste Sortierung lohnen, es sei denn, Sie probieren sehr oft (große Nans).Wenn Sie jedoch nur ein paar Mal probieren, werden Sie den Unterschied nicht bemerken.
Glen_b
2013-08-22 08:17:49 UTC
view on stackexchange narkive permalink

Als Antwort auf eine Frage in Kommentaren finden Sie hier einen Überblick über einige potenziell * schnellere Möglichkeiten, diskrete Verteilungen als die cdf-Methode durchzuführen.

* Ich sage "potenziell", weil in einigen diskreten Fällen ein Brunnen vorhanden ist Der implementierte inverse cdf-Ansatz kann sehr schnell sein. Der allgemeine Fall ist schwieriger zu lösen, ohne zusätzliche Tricks einzuführen.

Für den Fall von vier verschiedenen Ergebnissen wie im Beispiel in der Frage ist die naive Version des inversen cdf-Ansatzes (oder effektiv äquivalente Ansätze) fein; Aber wenn es Hunderte (oder Tausende oder Millionen) von Kategorien gibt, kann es langsam werden, ohne ein bisschen schlauer zu sein (Sie möchten auf keinen Fall sequentiell das PDF durchsuchen, bis Sie die erste Kategorie gefunden haben in dem das cdf eine zufällige Uniform überschreitet). Es gibt einige schnellere Ansätze als diesen.

[Sie können sehen, dass die ersten Dinge, die ich unten erwähne, eine Verbindung zu schneller als sequentiellen Ansätzen zum Auffinden eines Werts unter Verwendung eines Index haben und in gewisser Weise nur eine "intelligentere Version der Verwendung des cdf". Man kann sich natürlich "Standard" -Ansätze ansehen, um verwandte Probleme wie "Durchsuchen einer sortierten Datei" zu lösen, und Methoden erhalten, die viel schneller als die sequentielle Leistung sind. Wenn Sie geeignete Funktionen aufrufen können, sind solche Standardansätze häufig alles, was Sie benötigen.]

Auf jeden Fall einige effiziente Ansätze zum Generieren aus diskreten Verteilungen.


1 ) die "Tabellenmethode". Anstatt $ O (n) $ span> für $ n $ span> -Kategorien zu sein, wird die "einfache" "Version davon in (a) (wenn die Verteilung geeignet ist) ist $ O (1) $ span>.


a) Einfacher Ansatz - Annahme rationaler Wahrscheinlichkeiten (anhand des obigen Datenbeispiels):
- Richten Sie ein Array mit 10 Zellen ein, das eine '1', vier '2', zwei '3' und drei '4' enthält. Probieren Sie das mit einer diskreten Uniform (einfach aus einer kontinuierlichen Uniform), und Sie erhalten einfachen, schnellen Code.

b) Komplexerer Fall - benötigt keine 'netten' Wahrscheinlichkeiten. Verwenden Sie $ 2 ^ k $ span> -Zellen, oder Sie werden am Ende ein paar weniger verwenden. Betrachten Sie beispielsweise Folgendes:

  x 0 1 2 3 4 5 6P (X = x) 0,4581 0,0032 0,1985 0,3298 0,0022 0,0080 0,0002  

( Wir könnten natürlich 10000 Zellen haben und den vorherigen exakten Ansatz verwenden, aber was ist, wenn diese Wahrscheinlichkeiten beispielsweise irrational sind?)

Verwenden wir $ k = 8 $ span>. Multiplizieren Sie die Wahrscheinlichkeiten mit $ 2 ^ k $ span> und schneiden Sie sie ab, um herauszufinden, wie viele von jedem Zelltyp wir benötigen:

  x 0 1 2 3 4 5 6 TotP (X = x) 0,4581 0,0032 0,1985 0,3298 0,0022 0,0080 0,0002 1,0000 [256p (x)] 117 0 50 84 0 2 0 253  

Dann sind die letzten 3 Zellen im Grunde "Stattdessen aus dieser anderen Verteilung generieren" (dh p (x) - \ frac {\ lfloor 256 p (x) \ rfloor} {256}, normalisiert auf eine pmf):

  x * 0 1 2 3 4 5 6 TotP (X = x *) 0,091200 0,273067 0,272000 0,142933 0,187733 0,016000 0,017067 1,000000  

Die "Spillover" -Tabelle kann mit jeder vernünftigen Methode erstellt werden (Sie kommen nur in etwa 1% der Fälle hierher, sie muss nicht so schnell sein). $ \ frac {253} {256} $ span> der Zeit, in der wir eine zufällige Uniform erzeugen, verwenden Sie die ersten 8 Bits, um eine zufällige Zelle auszuwählen, und geben Sie den Wert in aus die Zelle; Nach der Ersteinrichtung kann dies alles sehr schnell erfolgen. Das andere $ \ frac {3} {256} $ span> der Zeit, in der wir eine Zelle mit der Aufschrift "Aus der zweiten Tabelle generieren" treffen. Fast immer generieren Sie eine einzelne Uniform auf $ (0,1) $ span> und erhalten eine diskrete Zufallszahl aus einer Multiplikation, einer Kürzung und den Kosten für den Zugriff auf ein Array-Element.

2) "Quadrieren des Histogramms" -Methode; Dies hängt irgendwie mit (1) zusammen, aber jede Zelle kann tatsächlich einen von zwei Werten erzeugen, abhängig von einer (kontinuierlichen) Uniform. Sie generieren also einen diskreten Wert von 1 bis n und prüfen dann in jedem Wert, ob der Hauptwert oder der zweite Wert generiert werden soll. Es funktioniert mit begrenzten Zufallsvariablen. Es gibt keine Spillover-Tabelle und es werden im Allgemeinen viel kleinere Tabellen als Methode (1) verwendet. Normalerweise ist es so eingerichtet, dass bei Auswahl von 1: n die ersten paar Bits einer einheitlichen Zufallszahl verwendet werden. Der Rest gibt an, welcher der beiden Werte für diesen Bin ausgegeben werden soll.

Vielleicht Der einfachste Weg, die Methode zu skizzieren, ist das obige Beispiel:

Stellen Sie sich die Verteilung als Histogramm mit 4 Fächern vor:

original 'histogram'

Wir schneiden die Spitzen der höchsten Balken ab und setzen sie in die kürzeren ein, um sie zu "quadrieren". Die durchschnittliche "Höhe" eines Balkens beträgt 0,25. Also schneiden wir 0,15 vom zweiten Balken ab und setzen ihn in den ersten und 0,05 vom vierten und setzen ihn in den dritten:

'squaring off' the histogram

Es ist immer möglich, dies in zu organisieren Auf diese Weise erhält kein Behälter mehr als zwei Farben, obwohl eine Farbe in mehreren Behältern enden kann.

Nun wählen Sie zufällig einen der 4 Behälter aus (erfordert 2 zufällige Bits oben auf einer Uniform). Anschließend verwenden Sie die verbleibenden Bits, um eine gleichmäßig verteilte vertikale Position anzugeben und mit der Unterbrechung zwischen den Farben zu vergleichen, um herauszufinden, welcher der beiden Werte ausgegeben werden soll. Obwohl es sehr schnell ist, ist es normalerweise nicht ganz so schnell wie die 'table'-Methode.

-

Diese Methoden können angepasst werden, um mit unbegrenzten Variablen umzugehen, wobei es wiederum meistens schnell ist '.

Eine Referenz: http://www.jstatsoft.org/v11/i03/paper

Der relativ langsame Teil davon ist das Erstellen der Wertetabellen; Sie eignen sich, wenn Sie wissen, was Sie generieren werden ("Wir müssen in Zukunft viele Male Werte aus dieser Verteilung abtasten"), anstatt zu versuchen, sie im Laufe der Zeit zu erstellen. "Wir müssen eine Million Werte von diesem ASAP abtasten, aber wir werden es nie wieder tun müssen" schafft unterschiedliche Prioritäten; In vielen Situationen sind einige der "Standard-Computing-Ansätze" zum Nachschlagen sortierter Werte (dh zum schnelleren Ausführen der cdf-Methode) möglicherweise die beste Wahl.


Es gibt noch andere schnelle Ansätze aus diskreten Verteilungen zu erzeugen. Sorgfältig codiert können Sie eine sehr schnelle Generierung durchführen. Zum Beispiel:

3) Die Zurückweisungsmethode ("Akzeptieren-Zurückweisen") kann mit diskreten Verteilungen durchgeführt werden. Wenn Sie eine diskrete Majorisierungsfunktion ("Hüllkurve") haben, bei der es sich um eine vergrößerte diskrete PMF handelt, aus der Sie bereits schnell generieren können, passt sie sich direkt an und kann in einigen Fällen sehr schnell sein. Im Allgemeinen können Sie die Möglichkeit nutzen, aus kontinuierlichen Verteilungen zu generieren (z. B. indem Sie das Ergebnis zurück in eine diskrete Hüllkurve diskretisieren).

Stellen Sie sich hier vor, wir haben eine diskrete Wahrscheinlichkeitsfunktion $ f $ span>, für die wir kein geeignetes cdf (oder inverses cdf) haben - - In dieser Abbildung hatten wir nicht einmal die Normalisierungskonstante, daher ist unser Diagramm nicht normalisiert:

plot of an unnormalized unimodal discrete probability mass function on the natural numbers; it has its mode at 2 and eventually tails off approximately geometrically

Nun müssen wir eine bequeme Funktion finden, die aus einer diskreten Wahrscheinlichkeitsfunktion $ g $ span> generiert werden kann, die mit einer Konstanten $ c $ span> und überall mindestens so groß wie $ f $ span> (wir müssen sicher sein, dass dies für alle $ x $ span> -Werte). Das heißt, $ cg (x) \ geq f (x) $ span> für alle möglichen $ x $ span> Werte.

Manchmal ist ein geeignetes $ g $ span> leicht zu identifizieren, aber eine nützliche Option besteht darin, eine Mischung aus einer diskreten Uniform für den linken Teil und zu nehmen eine Distribution mit mindestens so schwerem Schwanz wie $ f $ span> rechts. Zwei einigermaßen bequeme Möglichkeiten dafür sind eine geometrische Verteilung (wenn der Schwanz nicht langsamer als exponentiell abnimmt) und so etwas wie eine diskretisierte Pareto- oder diskretisierte Halb-Cauchy-Verteilung, die durch Nehmen von $ \ erhalten wird lfloor X \ rfloor $ span> für eine Pareto- oder Halb-Cauchy-Zufallsvariable $ X $ span> (in beiden Fällen, wenn die pmf langsamer als exponentiell abnimmt).

(In diesem Fall kann die Geometrie selbst durch Diskretisierung eines Exponentials erzeugt werden.)

In diesem Fall funktionieren eine diskrete Uniform links und eine Geometrie rechts recht gut :

The previous discrete pmf with the aforementioned uniform&geometric envelope (majorizing function)

(Erinnerung: Was hier dargestellt ist, ist eine nicht normalisierte pmf, sodass die y-Achse keine Wahrscheinlichkeit darstellt, sondern etwas Proportionales zur Wahrscheinlichkeit)

Dann geht es bei der Prozedur darum, einen vorgeschlagenen Wert $ x $ span> aus $ g $ span> zu simulieren. Simulation einer Uniform, $ U $ span> auf $ (0, cg (x)) $ span> und wenn $ U<f $ span>, wobei das vorgeschlagene $ x $ span> akzeptiert wird (andernfalls wird es abgelehnt und ein neues vorgeschlagenes $ x $ span>).

Danke, Glen! Der Ansatz von $ 2 ^ k $ ist vielversprechend. Könnten Sie bitte die Methode "Quadrieren des Histogramms" anhand eines Beispiels erläutern?
Klar, ich kann es versuchen, aber ich erinnere mich, dass Ihr ursprünglicher Kommentar mich gebeten hat, * Namen * zu nennen ... und so heißt es. In der Zwischenzeit gibt es eine gute Erklärung des grundlegenden Prozesses [hier] (http://www.robertowor.com/csci4151/lecture3.htm). Es wird auch als [Robin Hood-Methode] bezeichnet (http://www.jstatsoft.org/v11/i03/paper).
@Riga Ich habe die Erklärung mit einem kurzen Überblick über die Idee für den zweiten Fall des Beispiels in der Frage aktualisiert.
Danke Glen für deine Zeit! Ihre Referenzen und Erklärungen sind ein wertvolles Stück Wissen.
Hallo @Glen_b,, können Sie bitte näher erläutern, wie Sie auf Ihre zweiten / Spillover-Tabellenwahrscheinlichkeiten gekommen sind?
@greendiod Es ist $ p (x) - \ frac {\ lfloor 256 p (x) \ rfloor} {256} $, skaliert auf die Summe 1, also würde dies im Beispiel mit 256/3 multipliziert.
@Glen_b Ok, ich verstehe, Sie füllen die fehlende Wahrscheinlichkeit aus und renormieren, um basierend auf einer zufälligen Uniform über [0,1 (.) Zu generieren. Sie erinnert mich an die Ziggurat-Methode für normale Wohnmobile. Übrigens, wie erhalten Sie die erste8 Bits der zufälligen Uniform?
Die meisten Sprachen, die zur Implementierung einer schnellen Erzeugung von Zufallsvariablen geeignet sind, bieten Bitarithmetik.Wenn Sie also beispielsweise in C arbeiten (oder in einer Assemblersprache schreiben, um einen Chipsatz auf ein niedriges Niveau zu bringen, was ich mehrfach getan habe, als der C-Compiler oder ein anderer Compiler nicht ausreichte), ist dies der FallStandard.Wenn Sie versuchen, in einer sehr hohen Sprache zu schreiben, in der es aus irgendeinem Grund an einer schnellen Bitmanipulation mangelt, sind Sie wahrscheinlich nicht wirklich daran interessiert, die Leistung in diesem Ausmaß zu optimieren - verwenden Sie einfach eine andere Uniform.... ctd
ctd ... Auf der anderen Seite ist es das falsche Forum für diese Frage, wenn Sie etwas fragen wie "Wie mache ich Bitmanipulationen in * dieser * Sprache?".
@Glen_b Tatsächlich ist meine Frage eher auf konzeptioneller Ebene (auch wenn der Teufel wie immer im Detail steckt).Wenn ich keine Operatoren auf Bitebene hätte, hätte ich eine zufällige Zelle nach einem klassischen $ floor (U * 256) $ ausgewählt, der auf $ U ([0, ..., 255]) $ (wie Sie) folgtSie haben vorgeschlagen, aus der Spillover-Tabelle zu generieren, auch wenn diese langsam sein kann.Nun, $ U $ wäre in C beispielsweise ein IEEE754-Double (ok gory Implementierungsdetail). Nimmt man die ersten 8 Bits von $ U $ gut genug?(warum? irgendein Link?)
@green Ein einheitliches RNG generiert normalerweise Ganzzahlen in $ 0,1, ..., m-1 $ (für einige $ m $) anstelle von Gleitkommazahlen und skaliert sie dann auf ein Gleitkommaformat (z. B. double) in $[0,1) $ (durch Teilen durch $ m $).Es ist am einfachsten, die oberen Bits aus der Ganzzahl anstelle der oberen Bits des Bruchteils des Doppels (oder eines anderen verwendeten Gleitkommaformats) zu verwenden.Sie vermeiden die Low-End-Bits, da sie für einige RNGs nicht ausreichend zufällig sind.
@Glen_b Ich wurde von Ihrer vorgeschlagenen Generation aus der Spillover-Tabelle in die Irre geführt.In der Tat brauchten Sie es, um von Rnd (0, m -1) über U nach Rnd (0, n - 1) zu gelangen.Vielen Dank für all Ihre Beiträge
Normalerweise ist $ m $ im Vergleich zu $ n $ sehr groß
Du meinst $ U
@Foo ja.Wenn Sie denken, dass es nicht eindeutig oder nicht klar genug ist, könnte ich es bearbeiten.
@Glen_b In Ihrem Diagramm muss die vertikale Achse falsch beschriftet sein. Eine diskrete Zufallsvariable darf bei keiner einzelnen Beobachtung ein Maß größer als 1 haben.Die Summe aller Werte muss 1 ergeben und sie sind alle nicht negativ.
@Lucas Es ist nicht falsch beschriftet - meine Antwort besagt ausdrücklich, dass das, was gezeichnet wird, ein * nicht normalisiertes * $ f $ ist, wobei ich sage: "* In dieser Abbildung hatten wir nicht einmal die Normalisierungskonstante, daher ist unser Diagramm nicht normalisiert *"(dh die Variable px ist lediglich proportional zu den tatsächlichen Wahrscheinlichkeiten).Wenn Sie die Variable "px" so interpretieren, dass sie die Wahrscheinlichkeit darstellt, wäre dies eine Fehlinterpretation meiner Antwort.Ich könnte die Erklärung wiederholen, dass die Variable px eine nicht normalisierte Version des pmf ($ f $) darstellt, irgendwo später in der Antwort, denke ich.
@Glen_b Sie haben Recht, die Antwort besagt, dass die Dichten vergrößert sind - ich habe es falsch verstanden -, da die Antwort lang ist. Dies könnte das Verständnis erleichtern, wenn Sie irgendwo weiter unten in der Antwort erneut darauf eingehen.Entschuldigung für die Fehlinterpretation.
Vielen Dank;Ich habe es jetzt getan - ich habe einen Satz unter die letzte Handlung eingefügt (die mit der Majorisierungsfunktion darin).Die Wahl des Variablennamens (da ich "px" anstelle von "qx" verwendet habe) hat möglicherweise zu dem Eindruck beigetragen, dass dies die tatsächliche Wahrscheinlichkeit war.
user1893354
2013-08-21 01:51:40 UTC
view on stackexchange narkive permalink

In Python können Sie so etwas wie

  aus scipy.stats importieren. rv_discrete x = [1,2,3,4] px = [0.1,0.4,0.2,0.3] sample = rv_discrete (values ​​= (x, px)). rvs (size = 10)  

Damit erhalten Sie 10 Stichproben aus der Verteilung. Sie können dies wiederholen und dann die Anteile der Proben ermitteln, die 2 sind.

Greg Snow
2013-08-21 02:22:14 UTC
view on stackexchange narkive permalink

Ja, es ist möglich und ziemlich einfach, genau wie es davon abhängt, welche Werkzeuge Sie verwenden.

In R wäre es sample (1: 4, n, prob = c (0.1,0.4,0.2,0.3), replace = TRUE) wobei n die Anzahl der Werte ist, die Sie abtasten möchten.

In Werkzeugen ohne äquivalente Funktion Sie können immer noch einen einheitlichen Wert generieren, und dann ist Ihr Wohnmobil gleich 1, wenn es unter 0,1 liegt, 2, wenn es zwischen 0,1 und 0,5 liegt, 3, wenn es zwischen 0,5 und 0,7 liegt, und 4, wenn es größer als 0,7 ist (das ist die Idee der Zuordnung zu die kumulative).

Für Ihr Beispiel können Sie auch gleichmäßig aus einem Satz mit einer 1, vier 2, zwei 3 und drei 4 abtasten, um die gleichen Wahrscheinlichkeiten zu erhalten.

+1. Richten Sie als Arbeitsbeispiel für die äquivalente Funktion in Excel (nur um zu zeigen, wie einfach dies ist) ein Array von kumulativen Summen der Wahrscheinlichkeiten ein (z. B. (0,0.1,0.5,0.7,1.0)) und geben Sie ihr einen Namen (z. B. "cumsum") und verwenden Sie "= MATCH (RAND (), cumsum, 1)", um Werte 1,2,3,4 mit Wahrscheinlichkeiten von 0,1, 0,4, 0,2 bzw. 0,3 zu erzeugen. Dies zeigt deutlich, wie die gewichtete Abtastung mit der Arraysuche zusammenhängt.
Vielen Dank für diese Antwort, die mir sehr geholfen hat. Ich hoffe wirklich, dass dies jemand anderem hilft. Ich wünschte, ich hätte alle richtigen Antworten auswählen können. Danke an alle
Nick Cox
2013-08-21 02:40:41 UTC
view on stackexchange narkive permalink

In Stata:

Verwenden Sie in Mata rdiscrete () , wie unter http://www.stata.com/help.cgi?mf_runiform

In Stata selbst gibt es verschiedene Möglichkeiten. Hier ist eine:

 . gen rnd = runiform (). gen y = cond (rnd < = 0,1, 1, cond (rnd < = 0,5, 2, cond (rnd < = 0,7, 3, 4)))  


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...