Ich versuche, ein MATLAB/Octave-Programm mit NumPy 1.8.0 und Python 2.7.3 nach Python zu portieren. Ich habe this reference als Hilfe bei der Konvertierung von MATLAB-Funktionen in NumPy-Methoden mit großem Erfolg verwendet, bis ich an den Punkt komme, wo ich die Korrelation zwischen zwei Matrizen berechnen möchte.Was ist der Unterschied zwischen MATLAB/Octave corr und Python numpy.correlate?
Die erste Matrix ist 40000x25 Floats, die zweite Matrix ist 40000x1 Ints. In Octave verwende ich die Anweisung corr(a,b)
und bekomme eine 25x1-Matrix von Floats. Der Versuch, das entsprechende Verfahren in NumPy (numpy.correlate(a,b)
) erzeugt einen Fehler:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/numpy-1.8.0.dev_1a9aa5a_20130415-py2.7-macosx-10.8-intel.egg/numpy/core/numeric.py", line 751, in correlate
return multiarray.correlate2(a,v,mode)
ValueError: object too deep for desired array
Ich kann es an die Arbeit, wenn ich den Code ändern, um eine Korrelation für jede Spalte von a
zu berechnen, wie folgt:
for i in range(25):
c2[i] = numpy.correlate(a[:,i], b)
Die Werte im Array c2
sind jedoch anders als die Ausgabe von Octave. Octave gibt eine 25x1-Matrix von Floats zurück, die alle kleiner als 1 sind. Die Werte, die ich von NumPy erhalte, sind Floats zwischen -270 und 900.
Ich habe versucht zu verstehen, was die beiden Algorithmen unter der Haube machen, sind aber kläglich gescheitert. Kann jemand auf meinen Logikfehler hinweisen?
Ich habe versucht, dass aber 'numpy.cov (a, b)' gibt einen 2x2-Array von Schwimmern und ich weiß nicht, wie das bezieht sich auf die Korrelation. – Crystal
oder versuchen Sie einfach zu erhalten [Pearson's r] (http://docs.scipy.org/doc/scipy-0.12.0/reference/generated/scipy.stats.pearsonr.html) – Rasman
oder [dies] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html) – Rasman