Verfasst am: 29.01.2017, 23:37
Titel: Transinformation / Mutual information
Hallo,
gibt es in Matlab eine Funktion für die Transinformation (engl. mutual information), mit der ich den Zusammenhang von zwei Variablen erklären kann? Ich möchte gern die Wirkung der Beschleunigung auf den Partikelausstoß beim PKW erklären. Die Korrelationsanalyse bringt einen Wert hervor, der auf einen schwachen Zusammenhang schließen lässt, was ich nicht wirklich glaube. Ich habe bereits bei Google gesucht, aber nichts brauchbares gefunden. Da sind von Usern Funktionen geschrieben, die bei mir nicht so recht funktionieren.
Hier ein Beispiel:
Code:
function M = MI_GG(X,Y) % function M = MI_GG(X,Y) % Compute the mutual information of two images: X and Y, having % integer values. % % INPUT: % X --> first image % Y --> second image (same size of X)
%
% OUTPUT: % M --> mutual information of X and Y
%
% Written by GIANGREGORIO Generoso. % DATE: 04/05/2012 % E-MAIL: ggiangre@unisannio.it
%__________________________________________________________________________
Wenn ich die Funktion ausführe, erhalte ich eine Fehlermeldung, dass die Argumente in der Funktion fehlen? Ich habe aber X und Y im Workspace jeweils definiert. Was mache ich falsch?
das geht nicht, da es sich um eine Funktion handelt. Eine Funktion muss konkret mit den Übergabeparametern aufgerufen werden. Also statt auf Run drücken, ein mal im Command Window
Ok, jetzt habe ich es verstanden. Aber es funktioniert trotzdem nicht und ich bekomme die Fehlermeldung: "First input SUBS must contain positive integer subscripts." Denn ich habe auch negative rationale Zahlen. Und nun meine Frage: Funktioniert Transinformation nur bei natürlichen Zahlen oder ist das hier eine Frage der Programmierung?
Diese Funktion habe ich bereits ausprobiert und auch hier in meinem Forumeintrag erwähnt, aber ich bekomme die Fehlermeldung "First input SUBS must contain positive integer subscripts."
bitte immer die komplette Fehlermeldung posten.
Der Autor schreibt ja in der Dokumentation, dass der Code nur für Integer gedacht ist:
Zitat:
X and Y, having integer values.
Auch auf der File Exchange-Seite hat jemand im Diskussionsteil das gleiche Problem geschildert, und die Antwort war, dass X und Y eben integer-wertig sein müssen.
Das Problem mit den fehlenden Eingabeargumenten wurde dort übrigens auch schon behandelt.
Ich habe jetzt meine Daten so modifiziert, dass diese Integer sind mit dem Format uint64 und erneut die o.g. Funktion angewendet. Dabei erhalte ich folgende Fehlermeldung:
Code:
>> M = MI_GG(X,Y) Error using accumarray
Maximum variable size allowed by the program is exceeded.
Habe ich eine Möglichkeit, die Kapazität der Funktion zu ändern? Meine Variablen sind in der Dimension 42888x1.
Außerdem habe ich eine weiter Funktion gefunden, um die Transinformation zu berechnen:
Code:
function z = mutInfo(x, y) % Compute mutual information I(x,y) of two discrete variables x and y. % Input: % x, y: two integer vector of the same length % Output: % z: mutual information z=I(x,y) % Written by Mo Chen (sth4nth@gmail.com). assert(numel(x) == numel(y));
n = numel(x);
x = reshape(x,1,n);
y = reshape(y,1,n);
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.