【问题标题】:How can I easily create a dynamic 2D matrix of vectors in Matlab如何在 Matlab 中轻松创建动态二维向量矩阵
【发布时间】:2017-10-21 21:52:54
【问题描述】:

给定我的代码:

G=zeros(height,width); %zeros or whatever

for y = 1 : height
    for x = 1 : width
         magnitude = sqrt(Gx(y,x)^2 + Gy(y,x)^2);
         gradient_direction = atan(Gy(y,x)/Gx(y,x));
         G(y,x) = [magnitude gradient_direction];
    end
end

我不断得到这个(如果我不使用 zeros()):

下标分配维度不匹配。

或者这个:

Assignment 的非单件 rhs 维度比非单件多 下标

【问题讨论】:

    标签: matlab


    【解决方案1】:

    虽然@atru 回答有效,但如果有帮助的话,我想建议一种更快、更整洁的矢量化方式。这里的操作可以很容易地转化为向量化操作:

    G=cat(3,hypot(Gy,Gx),atan(Gy./Gx));
    

    【讨论】:

    • 这是一个更好的解决方案。也可以考虑使用atan2
    【解决方案2】:

    通过使用G(y,x,:) = [magnitude, gradient_direction];,您试图将两个值分配给一个为具有索引(y,x) 的单个值保留的位置。解决此问题的一种方法是改用 3 维数组 G,

    G=zeros(height,width,2);
    
    for y = 1 : height
        for x = 1 : width
             magnitude = sqrt(Gx(y,x)^2 + Gy(y,x)^2);
             gradient_direction = atan(Gy(y,x)/Gx(y,x));
             G(y,x,:) = [magnitude, gradient_direction];
        end
    end
    

    现在在每个点 G(y,x),您都可以存储这两个值并访问它们,例如 G(1,2,1) 用于 magnitude(1,2) 位置和G(1,2,2) 用于gradient_direction。这假设 GxGy 都是大小为高 x 宽的数组。


    需要注意的重要一点是,沿第三维的 G 切片也将是 3D 数组,即 mag_dir = G(3,2,:) 的大小为 [1 1 2] 而不是 [1 2]。这可能会在某些应用程序中导致错误,示例包括尝试将mag_dir 与另一个向量(没有额外维度)和线性代数运算连接。

    要解决此问题,请使用 reshape 将维度显式更改为目标维度。对于这里的向量,它将是reshape(mag_dir, 1, 2)。同样适用于像more_md = G(1,:,:) 这样的二维切片——这将需要例如more_md = reshape(more_md,2,5)

    【讨论】:

    • 酷 :) 有一件事,当你使用三维数组并像x=A(3,2,:) 那样对第三维进行切片时,你不会得到一维和二维数组,你会得到具有大小的数组像 [1,3,1] 即仍然是 3D - 不仅仅是 [1,3]。要将这些切片用作 1D 和 2D 数组,您需要使用 reshape。如果你愿意,我可以添加一个简单的例子。
    • 已添加。许多操作实际上会起作用。当我在 3 个空间维度上进行编程并尝试可视化/处理数据的横截面时遇到了问题。明天我会看看这些代码,如果我发现有用的东西可能会更新。
    • @Trt Trt 为什么不将其保留为两个不同的二维变量?
    • @Adiel 不知道这里的确切原因,但在科学计算中,您希望像这样将一些东西放在一起并不少见。特别是当它们引用单个 2D 对象(图像、空间等)的属性时。
    • 对,但似乎这比优势更让他头疼。无论如何,我会将它存储为具有不同字段的结构
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2015-11-24
    • 2021-12-06
    • 2014-07-27
    • 2015-05-18
    • 2013-10-03
    相关资源
    最近更新 更多