matlab cell find 元组 查找

首先声明任务:数据按照图片名称分为训练和测试,但是提取特征的时候是按照全部的图片提取vgg_feats.mat的,有一个task.txt其中存着所有的图片名字,每一行一个,另一个train.txt,里面名字的存储方式和task.txt一样,我这里的目的是想要在vgg_feats.mat里面抽取我想要的特征,其中涉及到元组的查找,这里记录一下。

元组查找我通过查资料找到两种方式:
第一种
利用ismember函数查看某个图片名是否是一个图片名元组集合的成员。

idx  = ismember(cell_name, find_str)

返回的idx是一个向量,1表示找到的find_str,0表示不是。
第二种
利用cellfun函数,这个函数也是第一次接触,简单来说,就是定义一些在cell上操作的函数。

[row, col] = find(cellfun(@(x) strcmp(x,find_str),cell_name);

上面的意思是在元组上定义了一组操作,操作的内容就是比较xfind_str是否相同,如果相同,就返回它所在的行和列,因为我这里图片的名字都是唯一的,所以返回的是单个数值,如果有重复的相同内容(比如在我这里就是图片的名字有重复),返回的就是一个向量,依次保存行和列。可以在matlab命令行中通过doc cellfun来查看更多关于该函数的功能。
下面附上自己的代码:


load('vgg_feats.mat')

trainpath = '../train.txt';
allpath = '../tasks.txt';
fid = fopen(allpath);
all_names = textscan(fid,'%s');
fclose(fid);
len_all = length(all_names{1});
fid = fopen(trainpath);
train_names = textscan(fid,'%s');
fclose(fid);
len_train = length(train_names{1});

dimension_feature = size(feats,1);

train_feats = zeros(dimension_feature, len_train);

for i= 1:len_train
    fprintf('%s\n',train_names{1}{i});
    [row, col] = find(cellfun(@(x) strcmp(x,char(train_names{1}{i})),all_names{1}));
    %lia = ismember(all_names{1}, char(train_names{1}{i}));
    %idx = find(row==1);
    %train_feats(:,i) = feats(:,idx);
    train_feats(:,i) = feats(:,row);
end

save('train_feats.mat','train_feats','-v7.3');

问题相关
cellfun相关

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

binqiang2wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值