У меня есть два массива ячеек строк различной длины, d = {'нерв', 'тело', 'мышца', 'кость'} и e = { 'тело', 'тело', 'мышцы'}. Я должен сравнить эти два массива и подсчитать вхождения каждой строки в e в d. Ожидаемым результатом должен быть вектор, count_string = (0,2,1,0). Ниже приведен код, который я написал, но я получаю сообщение об ошибке: Назначение содержимого ячеек для объекта, не связанного с ячейкой. Я новичок в программировании в Matlab. Любая быстрая помощь по этому поводу очень ценится.Подсчет вхождения строки в массив ячеек строк в Matlab
count_string=size(d)
for i=1:length(d)
count_string{i}=sum(ismember(e{i},d));
end
В конце концов, ваши предложения ниже, это модуль, который у меня есть.
for i=1:length(d_union)
count_string1=cellfun(@(x) sum(ismember(d1,x)), d_union);
count_string2=cellfun(@(x) sum(ismember(d2,x)), d_union);
count_string3=cellfun(@(x) sum(ismember(d3,x)), d_union);
count_string4=cellfun(@(x) sum(ismember(d4,x)), d_union);
count_string5=cellfun(@(x) sum(ismember(d5,x)), d_union);
count_string6=cellfun(@(x) sum(ismember(d6,x)), d_union);
count_string7=cellfun(@(x) sum(ismember(d7,x)), d_union);
count_string8=cellfun(@(x) sum(ismember(d8,x)), d_union);
count_string9=cellfun(@(x) sum(ismember(d9,x)), d_union);
count_string10=cellfun(@(x) sum(ismember(d10,x)), d_union);
count_string11=cellfun(@(x) sum(ismember(d11,x)), d_union);
count_string12=cellfun(@(x) sum(ismember(d12,x)), d_union);
count_string13=cellfun(@(x) sum(ismember(d13,x)), d_union);
count_string14=cellfun(@(x) sum(ismember(testdoc,x)), d_union); end
Мой компилятор matlab принимает навсегда выполнение этого модуля. 'd_union' является массивом ячеек 1x1216, и каждый из d1-testdoc составляет приблизительно 1 × 240 ячейки. Я должен вычислить сходство косинусов векторов, которые я получаю от вышеупомянутой операции. Есть ли способ ускорить процесс? Пожалуйста помоги. Спасибо.
ли вы * у * использовать строки? Похоже, количество возможных строк у вас довольно низкое; Не могли бы вы просто заменить каждую строку на число? Это, вероятно, ускорит многое! –
Ну, я должен использовать строки. Я читаю текстовый файл с несколькими параграфами документа, от d1 до d13. Я должен использовать их для выполнения других вычислений. Итак, я не уверен, что замена каждой строки номером будет работать отлично для меня. Есть ли другой метод? – user1222437
Вам не нужен цикл for, «cellfun» позаботится об этом. Вы просто используете один и тот же код несколько раз с тем же результатом. – yuk