如何在每一列中设置具有不同重复模式的矩阵?
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: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(:);
每一列都以不同的方式重复,因此您可以以不同的方式生成每一列:
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
我正在尝试在 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: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(:);
每一列都以不同的方式重复,因此您可以以不同的方式生成每一列:
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