我有一个大小为A
的矩阵5x7
。
如果我想根据满足某些条件的元素从A
中获取逻辑矩阵,我可以这样做:
A = [10 47 16 33 47 11 10
19 39 26 19 44 16 12
32 25 26 41 28 24 9
40 22 41 27 32 12 12
5 23 40 18 30 43 22]
>> A > 25 | A < 10
ans =
0 1 0 1 1 0 0
0 1 1 0 1 0 0
1 0 1 1 1 0 1
1 0 1 1 1 0 0
1 0 1 0 1 1 0
问题:如果我想指定行索引和列索引的条件,最好的方法是什么?
我的条件i
(行子)应小于j
(列子)。
我可以使用triu
执行此操作,但有没有使用逻辑索引的简单方法?
预期输出
0 1 1 1 1 1 1
0 0 1 1 1 1 1
0 0 0 1 1 1 1
0 0 0 0 1 1 1
0 0 0 0 0 1 1
另一个例子:
尺寸: 5x3
条件: (i > j+1) | i == 1 | i == 2
预期输出:
1 1 1
1 1 1
1 0 0
1 1 0
1 1 1
答案 0 :(得分:3)
我想到了一种使用bsxfun
[rows, cols] = size(A);
out = bsxfun(@(A,B) A > B+1 | A == 2 | A == 1 ,(1:rows).',1:cols);
结果:
>> out
out =
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 0 0 0 0 0 0
1 1 0 0 0 0 0
1 1 1 0 0 0 0
答案 1 :(得分:1)
这里有两种类型的条件,元素位置的条件和元素值的条件。我要做的是创建2个矩阵,一个用于位置,一个用于值:
loc = triu(ones(size(A)),1)
val = A > 25 | A < 10
然后使用or
or(loc,val) %// or loc|val
如果你想使用逻辑索引(即不是triu
/ tril
/等),那么我认为你必须创建索引矩阵并对它们进行逻辑索引:
[I,J]=ndgrid(1:size(A,1),1:size(A,2))
loc=I>J+1