Есть ли в MATLAB какая-либо функция для изменения формы матрицы? - PullRequest
0 голосов
/ 27 апреля 2010

Мне нужно получить неизвестную матрицу, изменив форму известной матрицы с учетом следующих правил:

H = [-P'|I] %'
G = [I|P]

, где

  • Н - известная матрица
  • G - неизвестная матрица, которую необходимо вычислить
  • Я - единичная матрица

Так, например, если бы у нас была матрица,

H = [1 1 1 1 0 0; 
     0 0 1 1 0 1; 
     1 0 0 1 1 0]

его форму необходимо изменить на

H = [1 1 1 1 0 0; 
     0 1 1 0 1 0; 
     1 1 0 0 0 1]

Итак

-P' = [1 1 1; 
       0 1 0; 
       1 1 0] 

и в случае двоичных матриц -P = P.

Следовательно

 G = [1 0 0 1 1 1; 
      0 1 0 0 1 0; 
      0 0 1 1 1 0]

Я знаю, как решить ее на бумаге, выполняя основные операции со строками, но пока не выяснил, как решить ее с помощью MATLAB.

Какой метод решения данной проблемы?

1 Ответ

1 голос
/ 27 апреля 2010

Если порядок столбцов в -P' не имеет значения, вот одно решение, использующее функцию ISMEMBER :

>> H = [1 1 1 1 0 0; 0 0 1 1 0 1; 1 0 0 1 1 0];  %# From above
>> pColumns = ~ismember(H',eye(3),'rows')  %'# Find indices of columns that
                                            %#   are not equal to rows
pColumns =                                  %#   of the identity matrix

     1
     0
     1
     1
     0
     0

>> P = -H(:,pColumns)'  %'# Find P

P =

    -1     0    -1
    -1    -1     0
    -1    -1    -1

>> G = logical([eye(3) P])  %# Create the binary matrix G

G =

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

ПРИМЕЧАНИЕ: Это решениебудет работать правильно для целых или двоичных значений в H.Если H имеет значения с плавающей запятой, вы, скорее всего, столкнетесь с проблемой сравнения с плавающей запятой при использовании ISMEMBER (подробнее см. здесь и здесь обсуждение этого вопроса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...