2016-12-02 40 views
1

我有两个相同大小的阵列,uxuy,我想合并成一个矢量单元阵列,这样U(1,1)包含一个矢量合成(U)= numel(ux)= numel(uy)'我怎样才能将两个矢量组件阵列组合成一个矢量阵列

组件uxuy表示图像梯度的单位向量。组件阵列由的elementwise乘法创建:

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

我需要能够多次访问每个矢量,并且调用它们作为dotcross参数,使载体的阵列会比更快,更方便在每次迭代中为每个迭代创建一个临时向量。

由于

编辑为进一步澄清:

假设我有一个数组

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个元素的数量...

感谢您的持续帮助。

+0

你想单元阵列是'numel(uy)x numel(ux)'? – Suever

+0

假设'ux'有一列,'[ux,uy]'。否则,'[ux',uy']'。或者,'[ux; uy]'' – Salman

+0

感谢您的建议。我会编辑帖子来澄清 - 我想要numel(U)= numel(ux)= numel(uy),但是每个U的单元格都包含一个向量[uy,ux]。 – Olly

回答

1

您可以创建两层。一层包含ux和其他层包含

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 
+0

感谢您的建议。不幸的是,ux和uy是标量值的矩阵。我想让它们成为矢量,并将它们放入矩阵中...或者我误解了你? – Olly

+0

我编辑了我的答案。 – netizen

+0

@Olly你的问题解决了吗? – netizen

1

如果你真的希望它是一个细胞载体,其中每个元素是一个[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产品进行alculate,则arrayfun(@dot,ux,uy)按元素明智地执行该作业。

+0

aha - 'arrayfun'可能就是事情。我不在寻找ux和uy的点 - 我正在寻找由ux和uy的相应元素构成的向量的点积 - 例如'[ux(m,n),uy(m,n) ]。[ux(p,q),uy(p,q)]' – Olly

+0

如果你能给我一些你的载体的例子,我可以给出一个更清晰的答案。您可以使用'ux'和'uy'中的一些示例编辑原始文章。 –

+0

试用600x300测试图像,ux和uy因此是600x300标量值数组。做'u = [ux,uy];'给我一个300x1200数组,'U(1,:);'给我一个1x1200的标量值数组。我在这里错过了什么? – Olly