如何在每一列中设置具有不同重复模式的矩阵?

How can I set a matrix with different, repeating patterns in every column?

我正在尝试在 GNU Octave 中设置一个 nx3 矩阵来散点图并将其与我已经求解并绘制的拟合曲面进行比较。然而,该矩阵在第 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

第一列确实有效,但第二列没有成功(我认为这不是最干净的方法)。有什么想法吗?

在我看来, 前两列中的模式对应于坐标网格,其中 x=1:4y=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(:);

每一列都以不同的方式重复,因此您可以以不同的方式生成每一列:

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