根据行和列子

时间:2015-04-30 05:34:04

标签: matlab matrix indexing

我有一个大小为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

2 个答案:

答案 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