matlab - создание одномерного массива из двухмерных частей - PullRequest
0 голосов
/ 26 января 2010

привет, у меня следующая ситуация

      h = [0,1,1,1;
           0,0,0,0;
           1,1,1,1];

Я проверю входящие значения, которые могут находиться в диапазоне от 0 до размера строки h, т.е. в данном случае 2 ,. так что мои варианты 0,1,2.

Теперь я хочу создать одномерный массив (назовем его j) следующим образом

всякий раз, когда входящее значение равно 0

j = [0,1,1,1]

в следующий раз, если входящее значение равно 1

, тогда j = [0,1,1,1,0,0,0,0]

и так далее ... как можно добиться этого в Matlab? спасибо!

Ответы [ 3 ]

1 голос
/ 26 января 2010

Matlab, как вы знаете, индексирует от 1, поэтому вам нужно будет добавить 1 к индексу 0,1,2, чтобы получить идентификатор строки для h. Так что, если вход «индекс»

j = h(index+1,:)

Тогда для следующего индекса

j = [j h(index+1,:)]

и т. Д.

1 голос
/ 26 января 2010

Попробуйте это (с x в качестве вектора входящих значений):

j = reshape(h(x+1,:).',1,[]);

Вышеприведенный код использует x+1 в качестве индекса для выбора копий строк, затем транспонирует и изменяет результат в один вектор строки. Вот тест:

>> h = [0 1 1 1; 0 0 0 0; 1 1 1 1];
>> x = [0 0 0];
>> j = reshape(h(x+1,:).',1,[])

j =

     0     1     1     1     0     1     1     1     0     1     1     1
0 голосов
/ 26 января 2010

Если входящее значение равно x, вы можете сделать что-то вроде:

g = h.'
j = g(1:(x+1)*size(h,2))
...