2013-04-02 4 views
1

У меня есть матрица АКак разделить элементы в матрице

1  1  0  0 
0  1  0  0 
1  0  0  1 
0  0  1  0 
0  0  0  0 
0  1  1  1 
1  1  0  0 
1  0  0  0 
0  0  0  1 

, если d = [1 2 3],

for i=2:length(d) 
    d(i) = d(i) + d(i-1); %d=[1 3 6] 
end 

затем с помощью,

d = [0, ceil((d./d(end))*length(x))]; %d=[2 5 9] 
disp('The resultant split up is:') 
for i=2:length(d) 
    disp(x((d(i-1)+1):d(i))); 
end 

в выход должен быть, Разделение: 1-й раздел вверх->

  1  1  0  0 %first 2 rows in matrix A 
      0  1  0  0 

второй раскол вверх>

  1  0  0  1 %next 3 rows 
      0  0  1  0 
      0  0  0  0 

третий раскол вверх>

  0  1  1  1 %next 4 rows 
      1  1  0  0 
      1  0  0  0 
      0  0  0  1 
+1

Прошу прощения за тупой комментарий, но это слишком много. В чем вопрос? –

+0

говорят, что если мои закодированные биты 10001100, если пользователь вводит матрицу счетчика переходов в [3 2 3], выход должен быть 100 01 100. Биты разделяются с использованием вышеупомянутой логики. –

+0

@EitanT: здесь проблема заключается в том, что мой закодированный поток бит находится в матричном формате mXn. Мне нужно разбить элементы в матрице согласно подсчету переходов –

ответ

2

Если я правильно понимаю ваш вопрос, то mat2cell, что вам нужно: Вот краткий пример:

%// Bits and hops array 
bits = '10001100'; 
hops = [3 2 3]; 

A = mat2cell(bits(:)', 1, hops) 

В результате массив ячеек строк:

A = 
    '100' '01' '100' 

Этот подход работает с массивами чисел, а также (bits = [1 0 0 0 1 1 0 0] например).

+0

'Ошибка: незаконное использование зарезервированного ключевого слова «конец». ??? Индекс превышает размерность матрицы. Ошибка в ==> @ (x, y) битах (x: y) Ошибка в ==> arraysplit при 10 A = arrayfun (бит @ (x, y) (x: y), startidx, endidx, 'Uniform', 0). Он показал эту ошибку, когда я выполнил эту прогу. –

+0

Я изменил ответ. –

+0

для любых заданных массивов входных чисел, в зависимости от количества ходов, он должен быть разделен. [1 1 1 1 0 0 0 0 0 0 1 0 1 1 0], а hopcount - [3 2 3], выход должен печатать первые 6 номеров, а затем следующие 4, а затем следующие 5 чисел. –

Смежные вопросы