MATLAB - как комбинировать клетки? - PullRequest
0 голосов
/ 27 апреля 2018

Допустим, мои векторы не содержат двойников. Они содержат клетки. combvec отказывается принимать значения ячеек ... например:

m = {
    [cell1, cell2, cell3];
    [cell4, cell5];
    [cell6];
    };

Хочу как-нибудь получить вектор вектора ячеек, содержащий все возможные комбинации ячеек: [[cell1, cell4, cell6]; [cell1, cell5, cell6]; [cell2, cell4, cell6]; [cell2, cell5, cell6]; [cell3, cell4, cell6]; [cell3, cell5, cell6];];.

Как это можно сделать?

P.S. Причина, по которой я это делаю, заключается в том, что я сгруппировал элементы и хочу найти все их комбинации, поэтому я подумал вставить их в ячейки nx1. Если есть лучшее решение, пожалуйста, сообщите ...

1 Ответ

0 голосов
/ 27 апреля 2018

Просто используйте combvec с массивами целых чисел, представляющих индекс столбца, затем используйте это для индексации вашего исходного массива

C = {[{1} {2} {3}]; [{4} {5}]; [{6}]}
cv = combvec(1:3, 1:2, 1)

out = [C{1}(1,cv(1,:)); C{2}(1,cv(2,:)); C{3}(1,cv(3,:))];

Вы можете обобщить это так (может быть более аккуратный способ)

idx = cellfun(@(x) 1:numel(x), C, 'uni', 0); % set up indexing array
cv = combvec(idx{:}); % get combinations

out = arrayfun(@(x) C{x}(1,cv(x,:)), 1:3, 'uni', 0); % index into the cell array
out = vertcat(out{:}); % concatenate results

% Result
>> out = 
{[1]}    {[2]}    {[3]}    {[1]}    {[2]}    {[3]}
{[4]}    {[4]}    {[4]}    {[5]}    {[5]}    {[5]}
{[6]}    {[6]}    {[6]}    {[6]}    {[6]}    {[6]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...