如何将两个矢量分量数组组合成matlab中的一个矢量数组

How can I combine two arrays of vector components into an array of vectors in matlab

我有两个大小相同的数组,uxuy,我想将它们组合成一个向量元胞数组,这样 U(1,1) 包含一个由 uy(1,1),ux(1,1) 和`numel(U)=numel(ux)=numel(uy)'

分量uxuy表示图像梯度的单位向量。组件数组由逐元素乘法创建:

ux = I1x./I1mag;
uy = I1y./I1mag;

我需要能够多次访问每个向量,并将它们作为 dotcross 的参数调用,制作向量数组会比创建广告更快更方便在调用它的每次迭代中,每个向量的 hoc 向量。

谢谢

为进一步清楚起见进行编辑:

假设我有一个数组

uy = (1,2,3;4,5,6);

和另一个相同大小的数组

ux = (9,8,7;6,5,4);

我需要 yx 向量,所以对于我们的例子来说是

([1,9], [2,8], [3,7]; [4,6], [5,5], [6,4])

请问最有效的方法是什么?我将获得每个像素与其相邻像素的点积,反之亦然,因此每个向量将被使用 16 次并且完整数组包含大约 10^4 或 10^5 个元素...

感谢您一直以来的帮助。

您可以创建两个图层。一层包含 ux,另一层包含 uy.

ux = [10 8 7;6 5 4];
uy = [1 2 3;4 5 6];

xy(:,:,1) = ux; // [10 8 7;6 5 4]
xy(:,:,2) = uy; // [1 2 3;4 5 6]

aaa=xy(1,1,:); // [10 1]
bbb=xy(1,2,:); // [8 2]

dot(aaa,bbb)

结果将是:

82

如果您真的希望它是一个元胞向量,其中每个元素都是一个 [1 x 2] 向量,请使用 mat2cell:

ux = rand(15,1);
uy = rand(15,1);
U = [ux, uy];
K = mat2cell(U,ones(size(U,1),1),2);

但正如其他人指出的那样,U = [ux, uy] 就足够了,因为您只需调用 U(1,:) 即可获得完全相同的结果,而不必担心单元格。

如果您想要计算两个向量的 dot 乘积,arrayfun(@dot,ux,uy) 会按元素计算。