Matrix mit Zufallszahlen unter Nebenbedingung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

alex2007 hat geschrieben:So?
Ja, die Formel ist korrekt. Allerdings solltest du das k bereits in Zeile zwei runden, das kann in Zeile 3 sonst dazu führen, dass du nicht N^2 Element hast.
BlackJack hat geschrieben:Wenn man die Formel schon in Code-Tags setzt, kann man sie auch ”richtig” setzen. ;-)
Guter Hinweis, gleich viel leserlicher :D
Das Leben ist wie ein Tennisball.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Fülle Deine Matrix mit Float-Zufallszahlen von 0 bis 1. Mache eine Kopie der Matrix. An der Kopie machst Du einen reshape, sodass die Matrix zu einem 1D-Array wird. Sortiere das 1D-Array nach Größe. Iteriere durch das 1D-Array aufsteigend und zähle die Elemente bis Du die Anzahl Deiner -1 Spins hast. Merke Dir den Wert im 1D-Array, bei dem Du das Iterieren abbrichst. In der Original-Matrix kriegen alle Werte <= dem Abbruchwert den Spin -1 und alle anderen +1.
a fool with a tool is still a fool, www.magben.de, YouTube
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@MagBen: das Problem ist bereits mit einer geschlossenen Formel gelöst worden. Ich verstehe auch nicht, welches Problem Dein Algorithmus lösen soll. Wenn Du schon weißt, wieviele -1 Du willst, brauchst Du sie doch nicht erst umständlich zählen. Zum Mischen gibt es shuffle.

das ganze, ohne erst Pythonlisten erzeugen zu müssen:

Code: Alles auswählen

import numpy as np
spins = np.ones((N,N))
k = round((spins.size * (1-m)) / 2)
spins.flat[:k] = -1
np.random.shuffle(spins.flat)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@Sirius3: Schöne Lösung, das flat-Attribut muss ich mir merken. Das macht die ganze Sache hier natürlich wesentlich eleganter.
Das Leben ist wie ein Tennisball.
Antworten