第一個答案是好的,但我會建議到不是使用arrayfun
。有更多雄辯的方法來做你所要求的。使用ismember
與all
結合,然後在完成後將其索引到矩陣A
中。基本上,你的問題是確定一行是否具有x
中的所有值,並忽略零值。在這種情況下,我們可以找到矩陣A
中實際爲零的所有值,然後使用它來增加我們的結果。
使用A
作爲第一輸入和x
作爲第二輸入將返回相同的尺寸A
是否在A
一個元件在x
發現告訴你的矩陣。如果要檢查是否爲連續矩陣A
所有元素可以在x
發現,檢查是否行中的所有元素是1
。在此之上,找出所有零元素,然後用ismember
輸出這些設置爲1,可以使用一個logical
OR來完成。之後,您可以使用all
並通過使用ismember
的輸出作爲all
的第一個輸入並將第二個參數設置爲2來獨立檢查每一行。然後這將返回矩陣A
中的所有行,其中任何列都位於x
忽略是零爲A
行這是你要尋找的任何值:
A = [1 2; 3 0; 4 0];
x = [1 2 3];
mask = ismember(A, x);
ind = all(mask | A == 0, 2);
我也是贊成的俏皮話。我們可以將它合併爲一行代碼:
ind = all(ismember(A, x) | A == 0, 2);
更簡單的是簡單地反轉A
。所有非零元素成爲true
和false
否則:
ind = all(ismember(A, x) | ~A, 2);
ind
因此將是:
>> find(ind)
ans =
1
2
:
>> ind
ind =
3×1 logical array
1
1
0
既然你想要的實際行指數,你可以在此之上使用find
要驗證,我們在您的評論中使用第二個示例:
>> A = [1 2;3 5;4 0];
>> x = [1 2 3];
>> ind = all(ismember(A, x) | ~A, 2)
ind =
3×1 logical array
1
0
0
>> find(ind)
ans =
1
我認爲這只是輸出A的第一行,而不是行索引1和2. – jonem
@jonem你想要行索引嗎?好的,讓我修改。 – rayryeng
是的,這就是我遇到困難的地方,因爲由於元素(2,2)中的零元素,全部函數爲第2行返回零,即使我不想包含(2,2)元素在比較中。 – jonem