【问题标题】:Meshgrid and double for-loops does not result in the same matrix, why?Meshgrid 和双 for 循环不会产生相同的矩阵,为什么?
【发布时间】:2014-12-16 00:10:52
【问题描述】:

我正在尝试计算表达式 f = 2y-exp(z) 对于 z 和 y 的不同值可以采用的所有值。如果 y 和 z 是长度为 M 的两个向量。我想知道为什么生成表达式 f 的两种方法会产生不同的结果。

使用网格网格:

    [Y,Z] = meshgrid(y,z);
argument = 2*Y-exp(Z);

双for循环

argument_new = zeros(M,M);
for i = 1:length(y)
    for j = 1:length(z)
    argument_new(i,j) = 2*y(i)-exp(z(j));
    end
end

任何提示将不胜感激!

【问题讨论】:

  • What Luis Mendo said。但这里是my 2 cents
  • so @user3748876 以下任何答案对您有帮助吗?如果是这样,请将它们标记为已接受。谢谢!

标签: matlab


【解决方案1】:

这是因为meshgrid 创建“反向”方向的方式。我找不到正确的词,但这里有一个示例说明您的代码。您会看到,如果您取消注释选项 2 并使用 argument_new(j,i) 而不是 argument_new(i,j) 两个矩阵是相等的(与 isequal 获得的一样)。

clear
clc

M = 20;
y = 1:M;
z = 1:M;

[Y,Z] = meshgrid(y,z);
argument = 2*Y-exp(Z);

argument_new = zeros(M,M);
for i = 1:length(y)
    for j = 1:length(z)
    %// 1)    
    argument_new(i,j) = 2*y(i)-exp(z(j));
    %// 2)
    %// argument_new(j,i) = 2*y(i)-exp(z(j));
    end
end

isequal(argument,argument_new) %// Gives 0 for option 1 and 1 for option 2.

【讨论】:

    【解决方案2】:

    归咎于meshgrid

    MESHGRID 类似于 NDGRID,除了 前两个输入的顺序 并且输出参数被切换(即 [X,Y,Z] = MESHGRID(x,y,z) 产生与 [Y,X,Z] = NDGRID(y,x,z)) 相同的结果。

    解决方案:使用ndgrid,它不会进行那种切换,因此更“自然”:

    [Y,Z] = ndgrid(y,z);
    argument = 2*Y-exp(Z);
    

    或者在你的代码中,在meshgrid之后,添加一个转置操作:argument = argument.';)

    【讨论】:

    • 我想@chappjc 很想回答这个问题:-)
    • 呸!哈哈,唉,我正在通过一个毫无意义的审查队列!
    • 是的...meshgrid 真的把我搞砸了好几次。 +1。
    • @chappjc 嗯...在找帽子,是吗?
    • @rayryeng 我确实很喜欢 Android...但不太喜欢帽子 :-) 不错的广告,我不知道!
    【解决方案3】:

    它们是相同的,你应该只是转置其中一个(在 Matlab 中是'),或者你可以在 for 循环中将 i 替换为 j,反之亦然

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-24
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 2017-12-13
      • 2017-10-01
      • 2023-01-04
      相关资源
      最近更新 更多