7

Ich bin die normalisierte Schnitte Paket von http://www.cis.upenn.edu/~jshi/software/Ncut_9.zip (auf einem Windows 7)Normalized Schnitte mit Matlab 2013a

Das verwendete fein mit Matlab2010a zu arbeiten. Allerdings habe ich zu Matlab2013a Upgrade (32-Bit-Studenten-Version) und ich jetzt die folgenden Fehlermeldung erhalten:

Error using arpackc 
Expect 2 output arguments 

Error in eigs_new (line 240) 
     arpackc(aupdfun, ido, ... 

Error in ncut (line 83) 
[vbar,s,convergence] = 
eigs_new(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P)); 

Error in ncutW (line 9) 
[NcutEigenvectors,NcutEigenvalues] = 
ncut(W,nbcluster); 

Error in NcutImage (line 18) 
[NcutDiscrete,NcutEigenvectors,NcutEigenvalues] 
= ncutW(W,nbSegments); 

Error in demoNcutImage (line 25) 
[SegLabel,NcutDiscrete,NcutEigenvectors,NcutEigenvalues,W,imageEdges]= 
NcutImage(I,nbSegments); 

Offensichtlich ist die new_eigs() Funktion in ncuts ist unvereinbar mit der ARPACK Version in der aktuellen Matlab.

  • Kennt jemand eine Abhilfe für dieses Problem?
  • Normalisiert verwendet eine modifizierte Version von Matlab eigs() Funktion. Warum kann ich nicht einfach Matlab's eingebautes eigs() anstelle von eigs_new() verwenden (es scheint zu funktionieren).
+0

Können Sie erklären, warum 'egs()' nicht für Sie funktioniert? – Shai

Antwort

7

Es gibt zwei Lösungen für dieses:

  1. Verwendung Matlab eigs() Funktion anstelle des eigs_new() in den normalisierten Einschnitten Paket. Ich denke, eigs_new() wurde entwickelt, um einige Kompatibilitätsprobleme mit einer früheren Version von Matlab zu lösen, und verursacht jetzt selbst ein Problem.

  2. Ändern eigs_new(). Wenn ein Anruf an arpackc() in eigs_new() vorliegt, führen Sie den Anruf wie in der Toolbox-Version eigs() aus. So, zum Beispiel:

    arpackc(aupdfun, ido, ... 
    bmat, intconvert(n), whch, nev, tol, resid, ncv, ... 
        v, ldv, iparam, ipntr, workd, workl, lworkl, info); 
    

wird

[ido, info] = arpackc(aupdfun, ido, bmat, intconvert(n), whch, ... 
     nev, tol, resid, ncv, v, ldv, iparam, ipntr, workd, workl, ... 
     lworkl, info); 

Es gibt nur zwei Orte waren, wo dies geändert werden musste, um es (obwohl funktioniert es andere Anrufe zu arpackc(), die eigentlich nicht tun ausgeführt werden).

Ich bin immer noch nicht sicher, warum eigs_new() überhaupt existiert.

+0

Erste Lösung funktionierte für mich wie ein Charme! Vielen Dank :) – Sadjad

0

Ich habe vor einiger Zeit mit diesem Code gearbeitet. Für 32-64 Bit Probleme habe ich einige Änderungen vorgenommen. Ich habe auch diese eigs_new Linie in

[vbar,s,convergence] = eigs2(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P)); 

Sollte funktionieren ...

+0

In meiner Version von Matlab scheint es keinen eigs2() zu geben, also hilft das leider nicht. – Bull

+0

@ user2151446 versuchen http://www.oifii.org/ns-org/nsd/ar/cp/music_marsyas-0.4.5/marsyas-0.4/marsyas-0.4.5/scripts/MATLAB/peakExtraction/ncut/edigs2. m – Shai

+0

Danke, aber diese Version von eigs2() hat die gleiche Inkompatibilität mit arpackc() in Matlab2013a wie egs_new() – Bull

5

In matlab2014a 64-Bit-Fenster, Sie

[vbar,s,convergence] = eigs_new(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P)); 

in Zeile 81 von ncut.m in

[vbar,s,convergence] = eigs(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P)); 

ändern und dann ist eigs_new.m nutzlos, die kümmern sich nicht. Seit 2014 (oder mehr als 2009) wurde arpackc durch Eigs ersetzt. Und Sie können die Hilfe von EIGs für weitere Hilfe lesen.