2021-03-18

matlab中如何批量删除cell包体中指定地数据

##如何批量提取cell中指定的数据看过来!
需求描述:今天在做实验地过程中有一个需求,老师给了我一个数据eth-80数据库,要做分类实验,在ImgData中存储着8个类地数据,总共大小是10 ×\times× 8 ,一列为一个类,目的随机从一个类中选取5个样本构成训练集,剩余地构成测试集集合;i.e. TrainData = 5 ×\times× 8 cell TestData = 5×\times× 8cell;

思考:使用randperm(n,k) 随机产生从1到n的k个数作为地址索引,所以这里就是randperm(10,5);将其赋值给TrainIDs,随机挑选的的5个样本的地址;在ImgData中索引就做到了,这个很简单;但是遇到的问题是,ImgData中剩余的数据怎么用代码实现? 挨个删除?那样复杂度太高,也太low了,在ImgData中删除TrainData,剩下的数据构成TestData,在matlab中并没有提供有关于批量删除定义的cell的数据;虽然

ImgData{1,1}=[];%删除(1,1)位置中的内容;

以及

ImgData(:,2) =[];%删除第2列中的内容;

并不能实现我的快速删除cell中指定的内容,但是,cell不能删除,但是 地址是可以删除的;
首先用ImgIDs = sort(randperm(10));生成一个1到10的数据,然后,从里面删除TrainIDS中的地址,保存的就是TestData中的数据;运行,实现了!奉上代码;

[row_ImgD,col_ImgD] = size(ImgData);
TrainData = cell(5,col_ImgD);
TestData = cell(5,col_ImgD);
for i_col = 1:col_ImgD
    TrainIDs= randperm(row_ImgD,5);
    ImgIDs = sort(randperm(row_ImgD));
    TestIDs = setxor(ImgIDs,TrainIDs);
    TrainData(1:5,i_col) = ImgData(TrainIDs,i_col);%随机产生地5个随机数,作为ImgData数组地索引,赋值给TrainData
    TestData(1:5,i_col) = ImgData(TestIDs,i_col);
end
``
eth-80数据,是一个用于物体识别的数据,可以在我的主页面免费下载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值