2017-03-17 55 views
1

我在矩陣A的Matlab中的尺寸爲MxN和尺寸爲1xN的兩個行向量BD。我想知道將BA的每一行進行比較的最快方法。所有元素都是10在Matlab中比較行向矩陣與向量的快速方法

具體來說,

A=[ 1  1  1; 
    1  1  0; 
    1  0  1; 
    1  0  0; 
    0  1  1; 
    0  1  0; 
    0  0  1; 
    0  0  0]; 



    B=[1 1 1]; 
    D=[1 0 0] 

我想要構造尺寸Mx1的矩陣CC(i)=1如果

B(1,1)>=A(i,1)B(1,2)>=A(i,2)和... B(1,N)>=A(i,N)

D(1,1)<=A(i,1)D(1,2)<=A(i,2)和... D(1,N)<=A(i,N)

B(:)A(i,:)

D(:)不同的是A(i,:)

不同在這個例子中要做到這一點可能是

lownew=repmat(D,size(A,1),1); 

greatnew=repmat(B,size(A,1),1); 

C=(sum(lownew<=A,2)==N & sum(greatnew>=A,2)==N & sum(lownew==A,2)~=N & sum(greatnew==A,2)~=N); 

C=[0;1;1;0;0;0;0;0]; 

一種方法是有什麼更快的方法?我的實際矩陣A的尺寸大於10^6

回答

0

當然,最快的方式(代碼行數和計算時間)肯定是使用bsxfun

你的情況:

tmp = bsxfun(@ge, A, B); 
res = all(tmp,2); 

是你要搜索的內容。請注意,bsxfun會自動處理不同大小的輸入,例如在您的示例中,因此在此處不需要使用repmat或矩陣乘法。

編輯以新的約束

同樣的想法。需要注意的是a<=ba~=b簡化a<b

tmp = bsxfun(@lt, A, B) && bsxfun(@lt, D, A); 
res = all(tmp,2); 
+0

謝謝你,我已經制定了多一點我的問題。你能看看嗎? – user3285148

+1

嘿,不要在答案後改變那樣的問題。請提出另一個問題。無論如何,我會編輯我的答案。 – Ratbert