Как бороться с индексацией, включающей три вектора? - PullRequest
1 голос
/ 01 ноября 2019

У меня есть следующие три вектора:

trans_now=[1 2 4]; data2send=[1 0 0 1]; datasent=[0 0 0 0];

Я хочу установить datasent в 1 для тех узлов, которые являются членами tran_now и чьи data2send статус 1. например, 4 является членом trans_now, а data2send(4) - это 1, поэтому datasent(4) должен быть установлен на 1.

Я могу сделать это, используя цикл for и оператор if, как показано в кодениже.

for i=1:length(trans_now)
    if data2send(trans_now(i))==1
        datasent(trans_now(i))=1;
    end
end

Однако я хочу один код лайнера для этого. Один код лайнера, который я пробовал:

req_sent(req2send(trans_now)==1)=1;

Но он не работает. Выход должен установить datasent vector на [1 0 0 1].

1 Ответ

1 голос
/ 01 ноября 2019

вы можете решить это двумя способами:

1.

data_sent(trans_now) = data2send(trans_now)

на выходе:

data_sent = 10 0 1

В этом решении я предположил, что все начальные значения data_sent начинаются с 0 и вам необходимо присвоить его один раз.

2.

datasent(intersect(find(data2send == 1), trans_now)) = 1

вывод:

data_sent = 1 0 0 1

В этом решении никакое предположение не используется, и выприсваивайте только индексы, где data2send == 1, а также появляются в trans_now

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...