2016-12-02 41 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