MATLAB单元函数根据条件

时间:2017-12-16 10:46:29

标签: matlab cell anonymous-function cell-array

给定[R G B]MATLAB值的单元格数组,我需要找到由满足条件的特定元素组成的子cell_array。 (使用细胞功能)。

我在想:

subset = cellfun(@(x) condition(x), superset, 'UniformOutput',false);

但是,对于那些满足条件的元素,它给出1,否则,如预期的那样给出0。但我需要一个子集,由condition == 1的那些元素组成。 请建议。

1 个答案:

答案 0 :(得分:1)

% Example Data
superset = {
    [0.983 0.711 0.000];
    [1.000 0.020 0.668];
    [0.237 1.000 1.000];
    [0.245 0.707 0.544];
    [0.000 0.000 0.000]
};

% Convert Cell Array of Vectors to Matrix
superset = cell2mat(superset);

% Example Condition: G and B Greater Than 0.5
subset_idx = (superset(:,2) > 0.5) & (superset(:,3) > 0.5);

% Subset Extraction
subset = superset(subset_idx,:);

允许您避免在每个单元格数组元素上循环的替代方法:

subset = superset(subset_idx,:)

无论您喜欢什么方法,将条件应用于数据的每一行都会产生一个逻辑值的行向量,其大小等于数据中的行数。因此,您需要应用索引以从集合enum class PARAM_TYPE_ {INT_}; enum class PARAM_NAME_ {NAME_}; typedef std::pair<PARAM_NAME_,PARAM_TYPE_> PARAM_; static constexpr std::unordered_set<PARAM_> params_ { PARAM_(PARAM_NAME_::NAME_,PARAM_TYPE_::STRING_) }; 中提取子集。