как быстро очистить часть вектора?

Как я могу взять часть вектора и заполнить другую часть нулем эффективным по времени способом?

У меня есть вектор;

 A  |  |                               A  | 0 |               
    |  |                                  | 0 |
    |  |                                  | 0 |
    |  | <-------- x         -----------> |   |  <--|
    |  |                                  |   |     |
    |  |                                  |   |     |     data in this region
    |  |                    after         |   |     |      is not changed
    |  |                                  |   |     |     
    |  |                  operation       |   |     |
    |  |                                  |   |     |
    |  |                                  |   |  <--|
    |  | <--------- y        -----------> |   |
    |  |                                  | 0 |
    |  |                                  | 0 |
    |  |                                  | 0 |

person user1414276    schedule 24.05.2012    source источник
comment
Напоминаем: если ваш вопрос решен с помощью любого из ответов, не забудьте отметить его как правильный ответ (нажав значок с изображением призрачной буквы v).   -  person Superbest    schedule 28.05.2012


Ответы (2)


u = 1:10;
v = [1:3, 8:10];

u(v) = 0;

Устанавливает первый и последний 3 элемента равными нулю. Чтобы сделать его более похожим на то, как вы сформулировали вопрос:

x = 3;
y = 8;
u = 2:2:20;
v = x:y;
w = 1:length(u);

u(setdiff(w, v)) = 0;

Хотя вы, вероятно, предпочтете просто сделать:

u(1:x-1) = 0;
u(y+1:end) = 0;

(+/-1 только в том случае, если вам нужен инклюзивный диапазон.)

person Superbest    schedule 24.05.2012

Кроме того, вы можете использовать логическое индексирование.

n = 20;
x = rand(n,1); %# sample content
i = 1:n; %# indices
x(~(i>3 & i<n-2)) = 0;
x

x =

         0
         0
         0
    0.2435
    0.9293
    0.3500
    0.1966
    0.2511
    0.6160
    0.4733
    0.3517
    0.8308
    0.5853
    0.5497
    0.9172
    0.2858
    0.7572
         0
         0
         0
person petrichor    schedule 24.05.2012