2017-01-31 104 views
0

我有6個不同的數組(雙),不同的大小,稱爲practice1,practice2,...,practice6,我需要相互比較來檢查它們是否包含相同的數字/值。我正在嘗試使用ismember和eval函數(如下所示)執行循環,但對於類型爲「logical」的輸入參數,我得到錯誤「Undefined function'eval'」。如果有人能幫助我如何做到這一點,我將不勝感激!其他Eval ismember in a loop

allvariables = who('practice*') 
for i=1:6 
eval(ismember(allvariables{i}, allvariables{i+1})) 

一個問題,我的迴路,如上述,我只是比較下一個,而不是每次練習與所有其他的現行做法。沒有一個循環或一個循環來覆蓋所有的可能性,可能有一個更簡單的方法嗎?

+1

我不認爲你在這裏需要'eval'命令。你能刪除它嗎? 'ismember(allvariables {i},allvariables {i + 1}))' – Pursuit

+0

不,它不起作用,因爲我需要比較每個數組的內容和所有變量= who('practice *')沒有內容。 – Paula

+0

我同意@Pursuit。這不是'eval'的工作原理,這裏沒有必要。 – Adriaan

回答

2

我想我看到這裏發生了什麼。您需要仔細構建您的字符串,然後整個事情,或eval的變量名稱,然後致電ismember

一些示例如下:

%First some setup 
practice_x= [1 2 3]; 
practice_y = [2 3 4]; 
practice_z = [1 4 5]; 
allvariables = who('practice*') 
% allvariables = 
%  3×1 cell array 
%  'practice_x' 
%  'practice_y' 
%  'practice_z' 

%Option 1 
for ix = 1:(length(allvariables)-1) 
    eval(['ismember(' allvariables{ix} ', ' allvariables{ix+1} ')']) 
end 

%Option 1a (same as 1, but IMHO slightly easier to work with and explain on SO) 
for ix = 1:(length(allvariables)-1) 
    strTemp = ['ismember(' allvariables{ix} ', ' allvariables{ix+1} ')']; 
    %When ix = 1, the strTemp variable contains the string below. 
    % strTemp = 
    % ismember(practice_x, practice_y) 
    eval(strTemp) 
end 

%Option 2, use `eval` on the variable names directly 
for ix = 1:(length(allvariables)-1) 
    ismember( eval(allvariables{ix}), eval(allvariables{ix+1}) ) 
end 

%For this example, all of these options result in the following output 
% ans = 
%  1×3 logical array 
%  0 1 1 
% ans = 
%  1×3 logical array 
%  0 0 1 

標準迂腐諫:這涉及到存儲在變量名的信息,迫使此類型變量的名稱作爲數據處理的

問題,通常意味着整體代碼的結構是這樣的,這個壓力很大,很難處理。

This Works。這與Matlab記載的功能一致。但是在這個代碼的某個地方,關於如何處理和存儲數據,有一些強烈的反模式。