【问题标题】:How can I set a matrix with different, repeating patterns in every column?如何在每列中设置具有不同重复模式的矩阵?
【发布时间】:2019-02-01 13:33:15
【问题描述】:

我正在尝试在 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

对于第一列实际上有效,但在第二列中没有运气(我认为这不是最干净的方法)。有什么想法吗?

【问题讨论】:

    标签: arrays matrix octave


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-06
        • 1970-01-01
        • 2015-07-22
        • 2014-03-14
        • 1970-01-01
        • 1970-01-01
        • 2018-12-08
        • 1970-01-01
        相关资源
        最近更新 更多