我正在尝试在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
在第一列中实际上工作了,但是在第二列中却没有运气(我认为这样做不是最干净的方法)。有什么想法吗?
答案 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