7

Sto usando il pacchetto di tagli normalizzati da http://www.cis.upenn.edu/~jshi/software/Ncut_9.zip (su Windows 7)tagli normalizzate con Matlab 2013a

Ciò consente di lavorare bene con Matlab2010a. Comunque ho aggiornato a Matlab2013a (versione per studenti a 32 bit) ed io ora ottenere il seguente errore:

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); 

Ovviamente la funzione new_eigs() in ncuts è incompatibile con la versione ARPACK nell'ultima Matlab.

  • Qualcuno sa di una soluzione alternativa per questo?
  • Normalizzato utilizza una versione modificata della funzione eigs() di Matlab. Perché non posso semplicemente usare il built-in eigs() di Matlab invece di eigs_new() (sembra funzionare).
+0

puoi spiegare perché 'eigs()' non funziona per te? – Shai

risposta

7

ci sono due soluzioni a questo: la funzione di

  1. Uso Matlab eigs() invece dei eigs_new() previsto nei tagli normalizzati pacchetto. Immagino che lo eigs_new() sia stato progettato per risolvere alcuni problemi di compatibilità con una versione precedente di Matlab, e che ora stia causando un problema.

  2. Modifica eigs_new(). Se è presente una chiamata a arpackc() in eigs_new(), effettuare la chiamata come nella versione della casella degli strumenti di eigs(). Così, ad esempio:

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

diventa

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

C'erano solo due luoghi in cui questo doveva essere cambiato per farlo funzionare (anche se vi altre chiamate a arpackc() che non in realtà essere giustiziati).

Non sono ancora sicuro del motivo per cui esiste lo eigs_new().

+0

La prima soluzione ha funzionato per me come un incantesimo! Grazie :) – Sadjad

0

Ero abituato a lavorare con questo codice qualche tempo fa. Per problemi a 32-64 bit ho apportato alcune modifiche. Ho cambiato anche questa linea eigs_new in

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

dovrebbe funzionare ...

+0

Non sembra un eigs2() nella mia versione di Matlab, quindi questo purtroppo non aiuta. – Bull

+0

@ user2151446 provare 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/eigs2. m – Shai

+0

Grazie, tuttavia, questa versione di eigs2() ha la stessa incompatibilità con arpackc() in Matlab2013a come eigs_new() – Bull

5

In Windows a 64 bit matlab2014a, si cambia solo

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

in linea 81 del ncut.m in

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

e poi eigs_new.m è inutile, che non si preoccupano. Becaus nel 2014 (o più del 2009) arpackc è stato sostituito con eigs. E puoi leggere l'aiuto di eigs per ulteriori informazioni.