1

我有这个矩阵:

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循环的情况下完成吗?

谢谢。

4

3 回答 3

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
于 2013-07-17T21:35:03.400 回答
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
于 2013-07-18T00:22:45.240 回答
0

你好,你可以试试这个:

B([A(1,1):A(1,2) A(2,1):A(2,2) A(3,1):A(3,2)]) = 1;
于 2013-07-17T22:57:14.443 回答