2016-12-02 7 views
1

uxuyの2つの配列をベクトルのセル配列に結合して、U(1,1)にベクトル(U)= numel(ux)= numel(uy) 'ベクトル配列の2つの配列をmatlabのベクトルの配列に結合するには

コンポーネントuxuyは、画像勾配の単位ベクトルを表します。成分の配列は、要素ごとの乗算によって作成されます。

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

私はより速く、より便利よりなり、複数回の各ベクトルにアクセスできるようにする必要があり、かつdotcrossの引数としてそれらを呼び出すと、ベクトルの配列を作ります呼び出されるすべての反復でそれぞれのための特別なベクトルを作成します。さらに明確にするため

おかげ

編集:

が、私はYXベクトルを必要とする配列

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

と同じサイズ

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

の別の配列があるとししたがって、その例は

です

([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'には1つの列' [ux、uy] 'があると仮定します。それ以外の場合は '[ux '、uy']'となります。または、[ux; uy] '' – Salman

+0

提案していただきありがとうございます。ポストを編集して、私はnumel(U)= numel(ux)= numel(uy)が必要ですが、Uの各セルにベクトル[uy、ux]が含まれています。 – Olly

答えて

1

2つのレイヤーを作成する。 1つの層はxxを含み、他の層はyyを含む。

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) 

結果は次のようになります。あなたは本当にそれはそれぞれの要素が[1 x 2]ベクトルである細胞ベクター、になりたい場合は、

82 
+0

提案していただきありがとうございます。残念ながら、uxとuyはスカラ値の行列です。私はそれらをベクトルにして行列に入れたいですか?または私はあなたを誤解していますか? – Olly

+0

私は私の答えを編集しました。 – netizen

+0

@Ollyあなたの問題は解決していますか? – netizen

1

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製品を2つのベクトルで計算したい場合は、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

関連する問題