MATLAB:基于 strfind 的结果在元胞数组中建立子索引
MATLAB: Subindexing in cell array based on results of strfind
我有一个元胞数组,像这样:
ID = {'g283', 'sah378', '2938349dgdgf', 'g283'};
我也有一些对应这些ID的数据。
Data = {'data1', 'data2', 'data3', 'data4'};
假设我当前的 ID 是 g283,我想提取与此 ID 匹配的数据。
我做了 strfind(ID, 'g283')
并得到了这样的结果:
result = {[1], [], [], [1]}
我现在想从数据中提取数据并得到这个:
new_data = ['data1', 'datat4'] 或同等学历。
但是,无法对元胞数组进行子索引,所以我想知道是否有一种无需循环即可执行此操作的简单方法。谢谢!
让输入变量定义为
ID = {'g283', 'sah378', '2938349dgdgf', 'g283'}; % ID
Data = {'data1', 'data2', 'data3', 'data4'}; % data
s = 'g283'; % current ID
您只需要申请isempty
to test if each result of strfind
contains a match or not. This can be done via cellfun
,例如如下:
ind = cellfun(@(x) ~isempty(strfind(x, s)), ID);
new_data = Data(ind);
如果您要查找整个字符串(而不是部分匹配),更简单的替代方法是使用 ismember
:
ind = ismember(ID, s);
new_data = Data(ind);
我有一个元胞数组,像这样:
ID = {'g283', 'sah378', '2938349dgdgf', 'g283'};
我也有一些对应这些ID的数据。
Data = {'data1', 'data2', 'data3', 'data4'};
假设我当前的 ID 是 g283,我想提取与此 ID 匹配的数据。
我做了 strfind(ID, 'g283')
并得到了这样的结果:
result = {[1], [], [], [1]}
我现在想从数据中提取数据并得到这个:
new_data = ['data1', 'datat4'] 或同等学历。
但是,无法对元胞数组进行子索引,所以我想知道是否有一种无需循环即可执行此操作的简单方法。谢谢!
让输入变量定义为
ID = {'g283', 'sah378', '2938349dgdgf', 'g283'}; % ID
Data = {'data1', 'data2', 'data3', 'data4'}; % data
s = 'g283'; % current ID
您只需要申请isempty
to test if each result of strfind
contains a match or not. This can be done via cellfun
,例如如下:
ind = cellfun(@(x) ~isempty(strfind(x, s)), ID);
new_data = Data(ind);
如果您要查找整个字符串(而不是部分匹配),更简单的替代方法是使用 ismember
:
ind = ismember(ID, s);
new_data = Data(ind);