Упростите код, чтобы сгладить массивы в Matlab - PullRequest
0 голосов
/ 05 января 2019

Предположим, у меня есть матрица 1000x2x10x10, и в настоящее время я помещаю их в две ячейки с помощью следующего кода

  for i=1:1000
    tmp = seqs(i,1,:);
    patterns{i} = tmp(:);
    tmp = seqs(i,2,:);
    labels{i} = tmp(:);
  end

Цель patterns{i} = tmp(:) и labels{i} = tmp(:) - выровнять матрицу. Мой вопрос заключается в том, можно ли упростить код, как patterns{i}=seqs(i,1,:)(:)? Я попробовал это, но Matlab не позволяет этого, и поэтому мне нужно использовать временную переменную tmp.

1 Ответ

0 голосов
/ 05 января 2019

Я просто дам вам 3 способа сделать это. Все из которых работают.

Во-первых, я обычно использую функцию на моем компьютере vec

.
function out = vec(in)
out = in(:);
end

и затем вы можете использовать его через

patterns{i} = vec(seqs(i,1,:));

Затем вы можете вызвать эту функцию, и это позволит более упростить код. Второе изменение формы упоминается в комментариях

patterns{i}=reshape(seqs(i,1,:),[],1);

Как правило, я не рекомендую изменять форму для этих типов проблем, потому что, как правило, это приводит к сбою, если вы не будете осторожны. Последнее - использовать сжатие и транспонирование.

patterns{i} = squeeze(seqs(i,1,:))';

Лично я предпочитаю первое, потому что мой код выглядит лучше.

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