Arrays 倍频程:如何对单元数组进行逻辑索引

Arrays 倍频程:如何对单元数组进行逻辑索引,arrays,indexing,cell,octave,Arrays,Indexing,Cell,Octave,在八度音阶中,我有一个单元 a={{1,'abc',3.5}, {2,'abc',4.5},{3,'def',5.4}} 我想做逻辑索引,就像做矩阵一样 差不多 a(:,3} =='abc' 应该产生一系列 [1, 1, 0] 基本上,我想生成一个新的单元数组,它只包含有“abc”的点,所以它应该减少到 b=a={{1,'abc',3.5}, {2,'abc',4.5}} 我该怎么做 a={{1,'abc',3.5}, {2,'abc',4.5},{3,'def',5.4}} arg

在八度音阶中,我有一个单元

a={{1,'abc',3.5}, {2,'abc',4.5},{3,'def',5.4}}
我想做逻辑索引,就像做矩阵一样

差不多

a(:,3} =='abc' 
应该产生一系列

[1, 1, 0]
基本上,我想生成一个新的单元数组,它只包含有“abc”的点,所以它应该减少到

b=a={{1,'abc',3.5}, {2,'abc',4.5}}
我该怎么做

a={{1,'abc',3.5}, {2,'abc',4.5},{3,'def',5.4}}
arg = 'abc'

res = cellfun(@(x) ismember(1, strcmp(x, arg)), a)
cellfun将给定函数应用于单元格数组的每个元素:

正如第一个链接所指出的,“@(x)创建一个匿名函数”

这篇文章展示了如何在混合类型的单元格数组中查找字符串:

在本例中,给定单元格数组的一个元素是单元格数组本身,因此x将保存该元素

x是{1,'abc',3.5}->strcmp(x,arg)是{0,1,0}->ismember(1,{0,1,0})计算为1

x是{2,'abc',4.5}->strcmp(x,arg)是{0,1,0}->ismember(1,{0,1,0})计算为1

x是{3,'def',5.4}->strcmp(x,arg)是{0,0,0}->ismember(1,{0,0,0})计算为0

所以res包含{1,1,0}