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

时间:2018-08-27 03:09:38

标签: arrays matrix octave

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

在第一列中实际上工作了,但是在第二列中却没有运气(我认为这样做不是最干净的方法)。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

在我看来,前两列中的图案对应于一个坐标网格,其中from itertools import groupby from operator import itemgetter grouper = ['Location', 'Name'] key = itemgetter(*grouper) dictionary.sort(key=key) [{**dict(zip(grouper, k)), 'Flow': sum(map(itemgetter('Flow'), g))} for k, g in groupby(dictionary, key=key)] [{'Flow': 160, 'Location': 'Europe', 'Name': 'B1'}, {'Flow': 120, 'Location': 'USA', 'Name': 'A1'}] x=1:4(或某些其他最终值)。 / p>

您可以使用y=5:5:20生成这些坐标:

meshgrid

(请注意x和y的反转方式,不要问)。接下来,您可以将它们与[y, x] = meshgrid(5:5:20, 1:4); 值一起放入矩阵,如下所示:

z

或者,您可以

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

答案 1 :(得分:1)

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

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