Использование массива строк Cell в программе

Предположим, у меня есть следующий код

mc = {[2 5],[2 5],[8 9 2],[33 77 4],[102 6],[110 99],[2 5]}

(Идентификация уникальных элементов в массиве ячеек: Ответ Джонаса):

%# convert to strings
mcs = cellfun(@(x)(mat2str(x)),mc,'uniformoutput',false);

%# run unique
[uniqueCells,idxOfUnique,idxYouWant] = unique(mcs);

fileName = ['C:\Users\MATLAB\matrice_Result.mat'];  
save(fileName,'uniqueCells');

чтобы загрузить результат и использовать его как ячейку, Могу ли я это сделать?:

load('C:\Users\MATLAB\matrice_Result.mat');
A = uniqueCells;

B = [5 77 41 66 7];

(Нахождение векторов ячейки A, содержащих хотя бы один элемент вектора B: Ответ Дивакара)

R = A(arrayfun(@(n) any(ismember(B,A{n})),1:numel(A)));

У меня такое впечатление, что второй код не распознает A!!!


person bzak    schedule 27.01.2015    source источник
comment
Ну, B это числа, A{n} это строки. Конечно ismember будет все false   -  person Luis Mendo    schedule 27.01.2015
comment
@LuisMendo: Я знаю, но мне стыдно признаться, что я не могу решить эту проблему!   -  person bzak    schedule 27.01.2015
comment
Ага, понятно. Подождите минуту   -  person Luis Mendo    schedule 27.01.2015


Ответы (1)


Просто используйте str2num(A{n}), чтобы преобразовать каждую ячейку A обратно в числовую форму:

R = A(arrayfun(@(n) any(ismember(B,str2num(A{n}))),1:numel(A)));

Приведенное выше дает результат в виде строки, потому что A{n} преобразуется в числа в пределах ismember, а A остается в виде строки. Если вы хотите получить результат в числовой форме, сначала преобразуйте A, а затем примените исходную строку (Дивакара) к преобразованному A:

A_num = cellfun(@str2num, A, 'uniformoutput', 0);
R = A_num(arrayfun(@(n) any(ismember(B,A_num{n})),1:numel(A)));
person Luis Mendo    schedule 27.01.2015