Return 个基于条件的元胞数组中的值

Return values in cell array based on a condition

我有一个 1x3 元胞数组,如下所示:

str = strings(6,1)
str(1) = 'A'
str(2) = 'B'
str(3) = 'A'
str(4) = 'B'
str(5) = 'A'
str(6) = 'B'

str2 = strings(6,1)
str(1) = 'r'
str(2) = 'r'
str(3) = 't'
str(4) = 's'
str(5) = 't'
str(6) = 'm'

a = [345; 344; 234; 234; 235; 231]

CA{1} = str
CA{2} = str2
CA{3} = a

我需要提取第 3 列中的值,其中: 第 1 列显示 'A',第 2 列显示 't'

我什至找不到如何处理它的开始,希望有人能帮助我! 我已经尝试了下面的代码,但是它们 return 是一个空向量,这可能是由于我对问题的错误说明,对此感到抱歉!!

我总是使用 KISS 代码(保持简单愚蠢)。我提出的方法可能不是最快或最优雅的,但我试过了并且有效。

% I'm using the length of cellarray{1} as reference, since all cells are the same length
for k = 1:length(cellarray{1})
    if ((cellarray{1}(k) == 'A') && (cellarray{2}(k) == 't'))
        % Assign the value to a new vector, or display the value... But this is how you get to it.
        disp(cellarray{3}(k));
    end
end

我在这个例子中调用了你的元胞数组cellarray。您也可以使用 strcmp 而不是 ==,事实上,如果您要比较的不仅仅是一个字符,您将需要这样做。

以下代码可能适用:

cellArray{3}((cellArray{1}=='A')&(cellArray{2}=='t'))

其中 cellArray{3} 是您要从中获取值的元胞数组的列,cellArray{1}cellArray{2} 是包含字符的列。这应该 return 一个包含数值的矩阵。

我希望这是有道理的!

我相信您正在寻找 cellfun。您想要索引到每个单元格的第三个元素,因此创建一个索引到值的第三个元素的函数,然后将其应用于每个单元格:

>> cellfun(@(c) c(3), CA,'UniformOutput',false)

ans =

  1×3 cell array

    {["A"]}    {["t"]}    {[234]}