使用矩阵行作为向量的索引范围?

时间:2013-07-17 21:26:13

标签: matlab

我有这个矩阵:

A = [1 3
    5 7
    9 10];

这个载体:

B = zeros(1,10);

现在,我想将[1:3][5:7][9:10]范围内的元素更改为 1 。 所以,要得到这个:

C = [1 1 1 0 1 1 1 0 1 1];

我试过了:

B(A(:,1):A(:,2)) = 1;

但它只是改变了第一个范围内的零。

可以在没有for循环的情况下完成吗?

感谢。

3 个答案:

答案 0 :(得分:4)

A的第一列是起始位置,第二列是每个序列1的结束位置。要表示开头使用1和结尾-1,请cumsum()

% Preallocate
N = 10;
B = zeros(1,N);

B(A(:,1)) = 1
B =
     1     0     0     0     1     0     0     0     1     0
B(A(:,2)+1) = -1
B =
     1     0     0    -1     1     0     0    -1     1     0    -1
B = cumsum(B)
B =
     1     1     1     0     1     1     1     0     1     1     0
B(1:N)
ans =
     1     1     1     0     1     1     1     0     1     1

答案 1 :(得分:2)

这样的事情是否恰当?

>> f = @(x)(any(A(:,1)<=x & x<=A(:,2)));
>> i = 1:length(B)

i =

     1     2     3     4     5     6     7     8     9    10

>> arrayfun(f,i)

ans =

     1     1     1     0     1     1     1     0     1     1

答案 2 :(得分:0)

你好,你可以试试这个:

B([A(1,1):A(1,2) A(2,1):A(2,2) A(3,1):A(3,2)]) = 1;