Häufigkeitsverteilung im Numpy Array

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
scandium
User
Beiträge: 25
Registriert: Montag 26. Januar 2015, 18:52

Hallo Zusammen,

für eine statische Auswertung, habe ich mir ein m x n Matrix erstellt. Die Werte sind Integer.
Ich würde gerne eine Häufigkeitsverteilung machen, sprich welcher Wert wie of vor kommt.
Die Matrix liegt als Numpy Array vor.
Es ist mein erstes Projekt mit Python und bin für einen guten Tipp immer dankbar.

Gruß
Harald
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

"scipy.stats.itemfreq" hilft dir da weiter.
Das Leben ist wie ein Tennisball.
scandium
User
Beiträge: 25
Registriert: Montag 26. Januar 2015, 18:52

Hallo EyDu,

vielen Dank, genau das hatte ich gesucht.
Zum Syntax hätte ich noch eine Frage:

Scipy habe geladen mit:

Code: Alles auswählen

import scipy as sp
im Script aufgerufen mit:

Code: Alles auswählen

m1=stats.itemfreq(m)
Warum werden Scipy Funktionen nicht aufgerufen wie in Numpy, also so:

Code: Alles auswählen

import numpy as np
m=np.ones((len(a1),7))
Hätte:

Code: Alles auswählen

m1=sp.stats.itemfreq(m)
nicht auch funktionieren müssen?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@scandium: Wenn Du scipy als sp einbindest, dann gibt es den Namen stats nicht, den mußt Du also noch irgendwo explizit als "from scipy import stats" eingebunden haben.
scandium
User
Beiträge: 25
Registriert: Montag 26. Januar 2015, 18:52

stimmt das habe ich auch gemacht.

Wie würde ich die Funktion mit "import scipy as sp" aufrufen?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das geht nicht, du musst das stats-Modul in jedem Fall importieren.
Das Leben ist wie ein Tennisball.
scandium
User
Beiträge: 25
Registriert: Montag 26. Januar 2015, 18:52

Eine Frage noch der von "stats.itemfreq(m)" erzeugten Array.
Dieses Array würde ich gerne nach der Häufigkeit mit dem dazugehörigen Element sortieren.

Da ich bisher nichts passenden gefunden habe, würde ich es erstmal so probieren:
* ein Spaltenvektor aus m1[:,1] machen
* diesen mit np.sort(x) der Größe nach sortieren
* dann mit For-Schleifen den passenden Wert in m1[:,0] suchen und die Matrix neu aufbauen

Gibt es vielleicht etwas passendes hierfür?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Du suchst argsort.
scandium
User
Beiträge: 25
Registriert: Montag 26. Januar 2015, 18:52

Ich kann den Output von "numpy.argsort¶" nicht deuten:
Im Manual finde ich folgendes: It returns an array of indices of the same shape as a that index data along the given axis in sorted order.
Was ist denn mit der Achse gemeint?

Beim Beispiel: "x = np.array([3,1,2,4,7])"
np.argsort(x)
bekomme ich ein Output von: "array([1, 2, 0, 3, 4])"

Nach welchen Kriterium wurden die Indizes vergeben?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

na, die kleinste Zahl ist bei Index 1, die zweikleinste bei 2 usw.
scandium
User
Beiträge: 25
Registriert: Montag 26. Januar 2015, 18:52

Alles klar, jetzt habe es auch verstanden...

Vielen Dank
Antworten