【问题标题】:Creating a meshgrid, without mesh command创建网格网格,无需网格命令
【发布时间】:2014-05-20 18:54:29
【问题描述】:

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

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

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

我尝试在一个while循环inside中做一个嵌套的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 循环来完成。

有什么建议吗?

【问题讨论】:

标签: matlab


【解决方案1】:

也许试试这个:

startIter = 1;
endIter = 3;

X = [];
Y = [];

line = startIter:endIter 

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

【讨论】:

    【解决方案2】:

    编辑:糟糕!刚刚注意到您想使用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,您可以通过在所需维度中指定ones 数组来复制数据。但是,当矩阵的大小变大时,这会变得非常慢,所以这里必须小心。

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

    【讨论】:

    • 我喜欢 Aside 版本,我以前从未见过那个版本。它很酷,但性能很差。我也喜欢 repmat,但是 Matlab 确实针对矩阵索引和 concat 以及其他类似的东西进行了优化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2012-08-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多