创建一个meshgrid,不带mesh命令

时间:2014-05-20 18:54:30

标签: matlab

我正在尝试创建一个看起来像这样的数组(作为示例)

X = | 1 2 3 |
    | 1 2 3 |
    | 1 2 3 |

Y = | 1 1 1 |
    | 2 2 2 |
    | 3 3 3 |

我尝试在一个while循环中执行嵌套for循环,使用此方法,Y数组工作但不是X数组,我有点理解为什么它不起作用但我不知道如何解决它。

这就是我得到的

X = [];
Y = [];
c=1;


while c<=3;

    for i=1:3

        for j=1:3
            X(i,c)=j;
            Y(i,c)=i;
        end
    end
    c=c+1;
end

据我所知,meshgrid命令会为我提供一行代码,但我必须使用嵌套for循环。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

也许试试这个:

startIter = 1;
endIter = 3;

X = [];
Y = [];

line = startIter:endIter 

for i = 1:endIter    
    X = [X;line];
    Y = [Y,line'];    
end

答案 1 :(得分:1)

编辑:哎呀!刚刚注意到你想用for循环来做这件事。我道歉。因此,我将把这里作为参考,以防有人想知道如何在没有循环的情况下做到这一点。


您可以在没有任何for循环的情况下执行此操作。尝试使用repmat

x = 1 : 3;
y = (1 : 3)';

X = repmat(x, 3, 1);
Y = repmat(y, 1, 3);

结果:

X =

 1     2     3
 1     2     3
 1     2     3


Y =

 1     1     1
 2     2     2
 3     3     3

通常,如果您需要M x N矩阵,请执行以下操作:

x = 1 : N
y = (1 : M)';

X = repmat(x, M, 1);
Y = repmat(y, 1, N);

除了

如果您不能 允许使用repmat,则可以通过在所需维度中指定 1 数组来复制数据。但是,当矩阵的大小变大时,这变得非常慢,因此必须小心。

x = 1 : N;
y = (1 : M)';

X = x(ones(M, 1), :);
Y = y(:, ones(N, 1));