2017-06-14 52 views
2

我有一個矩陣A和一個向量b。我不知道它們的大小,因爲它是另一個函數的輸出,所以大小會有所不同。我想要做的是過濾A的列(假設j th列),其中至少有一個值在bMatlab - 具有特定值的濾波器矩陣

如何在不測量b的大小並連接每個過濾結果的情況下執行此操作。眼下,代碼是這樣的(假設Ĵ是一個給定值)

bsize=size(b,1); 
for i=1:bsize 
    if i==1 
     a=A(A(:,j)==b(i),:); 
    else 
     a=[a; A(A(:,j)==b(i),:)]; 
    end 
end 

我想編寫一個更快的解決方案。

我正在添加一個數值例子來說明問題。比方說,

A=[2 4 
    7 14 
    11 13 
    15 14] 

b=[4 14]

我試圖做的是過濾器,以獲得A矩陣,它的值是4和14在第二列中,b元素,得到如下輸出。

A=[2 4 
    7 14 
    15 14] 

在我的數據A有超過12000行和b有超過100個元素。它並不總是必須是第二列,有時列索引會改變,但現在不是問題。

+0

我有困難的時候,瞭解你的目標是什麼。你能向我們展示一個數字例子和預期產出嗎? – rayryeng

+0

@rayreng謝謝。我添加了一個小例子 –

回答

2

使用ismember功能基礎上,Aj=2列和矢量b創建logical index,並使用該索引的A行:

output = A(ismember(A(:,j), b), :);