2013-11-30 3 views
-2

Пусть вектор индекса в двоичной системе, как показано нижеMatlab: изменение нулевой один индекс вектора собственного вектора индекса

Входной

1 1 0 0 1 0 1 

1 2 3 4 5 6 7 

Предназначен выход

1 2 5 7 

, который обозначает n-й номер будет выбран. Поэтому я хочу изменить 1 1 0 0 1 0 1 на 1 2 5 7, есть ли для этого простой способ?

+0

Я ранее сделал 'Vals = 1: длина (структура данных); vals (indicesBinary) ', но ищет более элегантное решение. – hhh

ответ

1

Решение с помощью функции find(indicesBinary)

+0

Ofc, почему я продолжаю забывать об этом ... + 1. – hhh

+2

:). Просто помните, что если вы хотите использовать его для индексирования другого вектора, использование find в качестве промежуточного шага на самом деле медленнее, чем использование индексовBinary напрямую – kamjagin

+0

Вы имеете в виду, что лучше делать vals = 1: length (dataStructure); Vals (логический (indicesBinary)) '? – hhh

2

Если вы действительно хотите использовать выходные данные индекса другого вектора, сделайте это непосредственно.

Вам просто нужно, чтобы превратить ваш бинарный вектор в logical

A = [1 1 0 0 1 0 1]; %assuming its double 
B = [1 2 3 4 5 6 7]; 

C = B(logical(A)) 

C = 

    1  2  5  7