我有一个解决方案,只为矩阵的一个元素创建一个向量:
[dx,dy] = gradient(Im);
orient11 = [(-dx(1,1)) (dy(1,1)) 0];
,其中
size(orient11) =
0 0 0
即,对于第一个东方元素,即orient11,是一个向量。我如何为所有其他元素执行此操作,因此我有orient12,orient13 .... orientnn。我知道我需要一个for循环,但是我将什么对象存储在for循环中?我发现我无法创建矢量矩阵。
提前致谢。
答案 0 :(得分:1)
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)
。
希望有意义并有所帮助!
答案 1 :(得分:1)
你可以尝试构建 N -by- N -by-3矩阵,但操作起来不会那么方便。这是因为从该矩阵中提取向量将产生1乘1乘3的向量,您需要重新整形。绝对不好玩。
相反,我建议你构建一个3乘1矢量的 N -by- N cell array,如下所示:
[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};
希望它有所帮助!