Преди време зададох този въпрос: Автоматично разделяне на матрицата на знаците според стойностите на колоната в променлив брой нови рамки от данни
За този въпрос функцията split
беше идеалният отговор, сега се опитвам да направя същото в Matlab и не мога да намеря никаква функция, която прави същото.
И така, простият ми въпрос е: Има ли някаква функция, която върши същото като R split
функция в Matlab? и ако не, как бих могъл да направя точно това, което беше зададено в свързания въпрос в Matlab?
Отговори:
1 за отговор № 1Мисля, че това, от което се нуждаете, е новият клас таблица R2013b:
>> x = {"Hi", "Med", "Hi", "Low"; "A", "D", "A", "C"; "8", "3", "9", "9"; "1", "1", "1", "2"}";
>> t = cell2table(x)
t =
x1 x2 x3 x4
_____ ___ ___ ___
"Hi" "A" "8" "1"
"Med" "D" "3" "1"
"Hi" "A" "9" "1"
"Low" "C" "9" "2"
>> slice = t(strcmp(t.x2,"A"),:)
slice =
x1 x2 x3 x4
____ ___ ___ ___
"Hi" "A" "8" "1"
"Hi" "A" "9" "1"
>>
За повече информация, разгледайте класа на таблицата тук
Ако искате да направите това за всички уникални стойности на таблицата, можете да използвате мобилната функция:
>> slices = cellfun(@(value) t(strcmp(t.x2,value),:), unique(t.x2),"UniformOutput",false)
slices =
[2x4 table]
[1x4 table]
[1x4 table]
>> slices{:}
ans =
x1 x2 x3 x4
____ ___ ___ ___
"Hi" "A" "8" "1"
"Hi" "A" "9" "1"
ans =
x1 x2 x3 x4
_____ ___ ___ ___
"Low" "C" "9" "2"
ans =
x1 x2 x3 x4
_____ ___ ___ ___
"Med" "D" "3" "1"
>>
В този случай вие предавате всеки уникален елементот t.x2 в тази функция. Еднообразният изход трябва да е невярен, така че клетъчната функция да не се опитва да обединява таблиците заедно, а по-скоро поставя всеки парче от таблицата в собствената си клетка.
1 за отговор № 2
Най- unique
и strcmp
функции работи на клетъчни масиви. Какво става с нещо подобно
x = {"Hi", "Med", "Hi", "Low"; "A", "D", "A", "C"; "8", "3", "9", "9"; "1", "1", "1", "2"}";
for ii = unique(x(:, 3))"
x(find(strcmp(x(:, 3), ii)), :)
end
Въпреки че може да изглежда глупаво, индексният масив за цикъла for трябва да бъде ред, така че unique(x(:, 3))"
транспониращият оператор е критичен. Ако е направено правилно ii
е скалар. В противен случай ще получите грешката
Грешка при използване на strcmp входовете трябва да са с еднакъв размер или всеки от тях може да бъде скалар