Splitting an array in every possible combination
5 次查看(过去 30 天)
显示 更早的评论
Hello,
I am attempting to split an array in all possible combination. I have illustrated it in the figure given below.
Depending on the number of rows, I wish to split the given array in all possible combinations.
One of the condition is Number of rows <= Number of elements in given array
After toiling for 3 days, I am posting this here.
Kindly guide me on how to accomplish this task.
Thanks for your time and valuable guidance.
12 个评论
Jonas
2022-7-14
@Selva Kumar, i know that it gives only one solution, i also wrote that it gives one at a time. but all of the solutions are at least valid. it should just be a help how the problem could finally be solved, that's why the code is a comment and not in the answer section
Jonas
2022-7-14
one 'solution' could be to run the script multiple times and collect unique solutions. but we still do not know restrictions on the number of columns
采纳的回答
Voss
2022-7-15
编辑:Voss
2022-7-15
I believe this will do the required "splitting" of the array:
format compact
x = 1:6;
disp(split_x(x,1));
disp(split_x(x,2));
disp(split_x(x,3)); % scroll down to see them all
disp(split_x(x,4)); % scroll down to see them all
disp(split_x(x,5)); % scroll down to see them all
disp(split_x(x,6));
function x_split = split_x(x,n_rows)
N = numel(x);
n_cols = N-n_rows+1;
split_idx = nchoosek(1:N-1,n_rows-1);
n_combos = size(split_idx,1);
split_idx = [zeros(n_combos,1) split_idx N*ones(n_combos,1)];
n_split = diff(split_idx,1,2);
x_split = zeros(n_rows,n_cols,n_combos);
for ii = 1:n_combos
for jj = 1:n_rows
x_split(jj,1:n_split(ii,jj),ii) = x(split_idx(ii,jj)+(1:n_split(ii,jj)));
end
end
end
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!