第一个答案是好的,但我会建议到不是使用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