我有两个相同大小的数组ux
和uy
,我想将其组合到一个向量的单元格数组中,以便U(1,1)
包含由uy(1,1),ux(1,1)
和`numel(u)组成的向量= numel(ux)= numel(uy)'
组件ux
和uy
代表图像梯度的单位向量。组件数组是通过elementwise乘法创建的:
ux = I1x./I1mag;
uy = I1y./I1mag;
我需要能够多次访问每个向量,并将其称为dot
和cross
的参数,并且制作一个向量数组比在每个迭代中为每个迭代中的每个迭代中创建一个临时矢量都更快,更方便称为。
谢谢
编辑以进一步清晰:
假设我有一个数组
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)
执行该作业元素。