我有这个矩阵:
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
循环的情况下完成吗?
感谢。
答案 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;