Matlab 使用for循环填充向量

Matlab 使用for循环填充向量,matlab,vector,for-loop,Matlab,Vector,For Loop,我有一个为矩阵的一个元素创建向量的解决方案: [dx,dy] = gradient(Im); orient11 = [(-dx(1,1)) (dy(1,1)) 0]; 在哪里 对于orient的第一个元素,即orient11,是一个向量。我如何对所有其他元素执行此操作,所以我有orient12,orient13…orientnn。我知道我需要一个for循环,但是我应该将for循环中的向量存储到哪个对象中?我发现我无法创建向量矩阵 提前谢谢 v = -2:0.2:2; [x,y] = meshg

我有一个为矩阵的一个元素创建向量的解决方案:

[dx,dy] = gradient(Im);
orient11 = [(-dx(1,1)) (dy(1,1)) 0];
在哪里

对于orient的第一个元素,即orient11,是一个向量。我如何对所有其他元素执行此操作,所以我有orient12,orient13…orientnn。我知道我需要一个for循环,但是我应该将for循环中的向量存储到哪个对象中?我发现我无法创建向量矩阵

提前谢谢

v = -2:0.2:2;
[x,y] = meshgrid(v);
z = x .* exp(-x.^2 - y.^2);
[px,py] = gradient(z,.2,.2);

orient11 = [(-px(1,1)) (py(1,1)) 0]; % based off of your concatination there.
size(orient11)
然后我得到:

ans =

     1     3
如果您希望从渐变中获取第一列数据,并希望仅使用它们堆叠零,则可以执行以下操作:

orient11 = [(-px(:,1)) (py(:,1)) zeros(size(px,1),1)];
而不是
for
循环

更新:

Orient = zeros(size(px,1),3,size(px,2));
for n = 1:size(px,1)
    Orient(:,:,n) = [(-px(:,n)) (py(:,n)) zeros(size(px,1),1)];
end
Orient
的布局现在是您的-px,py,0层。每个层表示初始数据中的列。因此,如果您想访问第4行第14列,可以调用
Orient(4,:,14)

希望这是有意义和有帮助的

您可以尝试构建一个N-by-N-by-3矩阵,但操作起来并不方便。这是因为从这个矩阵中提取一个向量将产生一个1×1×3的向量,需要对其进行重塑。绝对不好玩

相反,我建议您构建一个由1×3个向量组成的N×N向量,如下所示:

[dx, dy] = gradient(Im);
vec = @(i)[-dx(i), dy(i), 0];
orient = arrayfun(vec, reshape(1:numel(dx), size(dx)), 'UniformOutput', 0);
要访问向量,请使用大括号。例如,(1,2)位置处的向量为:

orient12 = orient{1, 2};

希望有帮助

“我发现我不能创建向量矩阵”:为什么不能?你几乎肯定没有正确的方法。你想实现什么?与其创建N个长度为3的向量变量,为什么不创建一个Nx3矩阵呢?我有一个图像,我有图像的梯度dx和dy。这些是图像每个像素处渐变的标量值。我还要梯度向量。所以对于每个像素,我有pix1=[-dx(1,1)dy(1,1)0]。在这里我附加了z维度。所以本质上我想要一个存储长度为3的nxn向量的对象。pix12=[-dx(1,2)dy(1,2)0]pix2020=[-dx(20,20)dy(20,20)0]等等……如何定义
orient12
?像这样:
[(-dx(1,2))(dy(1,2))0]?嗨,本,谢谢你的回答。只是出于兴趣,如果我将(:,1)替换为(:,:),那么会给出每列中每个元素的向量,而不仅仅是第一列。这能给我一个向量场吗?对于nxn元素,每个元素都有一个大小为[13]的向量?因为这就是我想要的。@brucezepplin不,不幸的是,这行不通。这将简单地给出所有的-px项,然后是py项,最后是一堆0。要快速解决这个问题,唯一的方法就是使用相同的思想进行for循环。我会看看我是否能在几分钟内搞定一些东西。我会用它更新我的帖子。谢谢,这看起来很棒。我明白这其中的逻辑。现在,我将图像拆分为列。每列包含该列的所有元素向量。是否有任何方法可以重塑Orient,以便Orient根据图像尺寸容纳所有列?我宁愿向量不被分割成各自的列,而是将所有向量存储到一个对象中。我会检查猫的功能在同一时间,希望我会找到它!嗨,伊顿-这看起来很棒。我将对此进行一次尝试,但这基本上回答了我最初的问题。
orient12 = orient{1, 2};