這是一個可能的解決方案,將最終值放入結構體的字段中。我用了一個正則表達式來提取變量名稱和變化,因爲你沒有說它們可能會變多長。
% fake data
vars = {'sums4', 'sums2', 'sums1', 'a0', 'a5'};
data(1,:) = logical([0 0 1 0 0 0 1]);
data(2,:) = logical([0 1 1 1 1 0 0]);
data(3,:) = logical([1 0 1 1 0 0 1]);
data(4,:) = logical([0 0 1 0 1 1 1]);
data(5,:) = logical([0 1 1 1 0 0 0]);
output = struct();
for i = 1:length(vars)
matches = regexp(vars{i}, '(\D+)(\d+)', 'tokens');
var = matches{1}{1};
shiftsize = str2num(matches{1}{2});
% initialise if not already present
if (~isfield(output, var))
output.(var) = zeros(1, size(data, 2));
end
% add apropriate shifted value to current values
output.(var) = output.(var) + (bitshift(1, shiftsize) * data(i, :));
end
輸出端了瓦爾
串件
output =
sums: [2 4 22 6 4 0 18]
a: [0 32 33 32 1 1 1]
@Alex嗨,thaks的代碼,它的偉大工程的名字命名的領域! 只是一個小修改,也許我沒有說清楚。 如果變量包含某個字段而沒有在數字中完成(對於單位信號通常是這種情況),則該代碼會給出錯誤。 無論如何,我通過添加一個if語句來對代碼進行修改,如果(〜isempty(matches))' 'var = vars {i};'if語句 ' 'shiftsize = 0' 'else' 'var = matches {1} {1}' 'shiftsize = str2num(matches {1} {2});'' '結束' – 2012-04-17 12:39:46