我想我看到這裏發生了什麼。您需要仔細構建您的字符串,然後整個事情,或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記載的功能一致。但是在這個代碼的某個地方,關於如何處理和存儲數據,有一些強烈的反模式。
我不認爲你在這裏需要'eval'命令。你能刪除它嗎? 'ismember(allvariables {i},allvariables {i + 1}))' – Pursuit
不,它不起作用,因爲我需要比較每個數組的內容和所有變量= who('practice *')沒有內容。 – Paula
我同意@Pursuit。這不是'eval'的工作原理,這裏沒有必要。 – Adriaan