Как я могу установить матрицу с разными повторяющимися узорами в каждом столбце? - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь установить матрицу nx3 в GNU Octave, чтобы разбросать график и сравнить его с подобранной поверхностью, для которой я уже решил и построил график.Однако эта матрица имеет повторяющиеся шаблоны в столбцах 1 и 2;Я мог бы установить их вручную, но количество строк несколько велико, и единственная строка, которая у меня есть в настоящее время, - это неповторяющаяся (строка 3).Например:

A=|1 5 z|
  |2 5 z|
  |3 5 z|
  |4 5 z|
  |1 10 z|
  |2 10 z|
  ...

и так далее.Где z - это значения, которые у меня уже есть в качестве вектора столбца, которые я могу просто вставить в матрицу с помощью:

A(:,3)=z

Однако я попытался сделать

A(2:4:n)=2;A(3:4:n)=3;A(4:4:n)=4

, которыйна самом деле работал для первого столбца, но со вторым не повезло (и я не думаю, что это самый чистый способ сделать это).Есть идеи?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Каждый столбец повторяется по-разному, поэтому вы можете генерировать каждый из них по-разному:

octave:1> col1 = repmat ([1:4].', [3 1]); # repeat matrix
octave:2> col2 = ([5 5 5 5].' .* [1 2 3])(:); # automatic broadcasting
octave:3> col3(1:12, 1) = 42; # on the fly by assignment
octave:4> A = [col1 col2 col3]
A =

    1    5   42
    2    5   42
    3    5   42
    4    5   42
    1   10   42
    2   10   42
    3   10   42
    4   10   42
    1   15   42
    2   15   42
    3   15   42
    4   15   42
0 голосов
/ 27 августа 2018

Мне кажется , что шаблон в первых двух столбцах соответствует сетке координат, где x=1:4 и y=5:5:20 (или какое-либо другое конечное значение).

Вы можете сгенерировать эти координаты, используя meshgrid:

[y, x] = meshgrid(5:5:20, 1:4);

(обратите внимание, как x и y меняются местами, не спрашивайте).Затем вы можете поместить их в матрицу вместе со значениями z, которые у вас уже есть, следующим образом:

A = [x(:), y(:), z];

В качестве альтернативы вы можете сделать

A(:,1) = x(:);
A(:,2) = y(:);
...