7

我使用從http://www.cis.upenn.edu/~jshi/software/Ncut_9.zip (在Windows 7)的標準化切割封裝用Matlab 2013a

標準化切割過去,這很好地工作Matlab2010a。不過我已經升級到Matlab2013a(32位學生版),我現在得到以下錯誤:

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

顯然,在ncutsnew_eigs()功能與ARPACK版本中最新的Matlab的不兼容。

  • 有沒有人知道這個解決方法?
  • 標準化使用Matlab的eigs()函數的修改版本。爲什麼我不能使用Matlab的內置eigs()而不是eigs_new()(它似乎工作)。
+0

你能解釋爲什麼'eigs()'不適合你嗎? – Shai 2013-05-08 15:28:03

回答

7

有兩個解決辦法:

  1. 使用Matlab的eigs()功能,而不是在標準化切割提供的eigs_new()包。我猜eigs_new()被設計來解決與以前版本的Matlab的一些兼容性問題,現在它本身就引起了一個問題。

  2. 修改eigs_new()。在eigs_new()中撥打arpackc()的電話時,請撥打eigs()的工具箱版本。 因此,如:

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

成爲

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

只有兩個地方,這一切都被改變,使其工作(雖然有其他呼叫arpackc()這實際上並不得到執行)。

我仍不確定爲什麼eigs_new()存在。

+0

第一種解決方案對我來說就像一個魅力!謝謝 :) – Sadjad 2013-08-22 14:31:08

0

我以前用這個代碼工作。對於32-64位的問題,我做了一些改變。我也改變了這個eigs_new行成

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

應該工作...

+0

在我的Matlab版本中似乎沒有eigs2(),所以這不幸沒有幫助。 – Bull 2013-05-08 14:54:33

+0

@ user2151446請嘗試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 2013-05-08 15:15:31

+0

謝謝,但是eigs2()的這個版本與Matlab2013a中的arpackc()具有相同的不兼容性eigs_new() – Bull 2013-05-08 15:20:56

5

在matlab2014a 64位Windows, 你只改變

[vbar,s,convergence] = eigs_new(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,'LA',options,tril(P)); 
在ncut.m 的81線

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

然後eigs_new.m是無用的不關心。 2014年的Becaus(或超過2009年)arpackc已被eigs取代。 你可以閱讀eigs的幫助以獲取更多幫助。