octave:如何对单元格数组进行逻辑索引

时间:2014-07-13 12:23:11

标签: 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}}

我该怎么做?

1 个答案:

答案 0 :(得分:0)

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将给定函数应用于单元格数组的每个元素: http://www.mathworks.com/help/matlab/ref/cellfun.html

如第一个链接所示' @(x)创建一个匿名函数'

这篇文章展示了如何查找字符串是否为混合类型的单元格数组: Find string in cell array with elements of different types

在这种情况下,给定单元格数组的一个元素是一个单元格数组本身,这就是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}