0
Или, как правило, список целых чисел от 1 до n в n-мерный вектор нулей и единиц?В Octave/Matlab, как мне превратить [1,2,4,8] в [1 1 0 1 0 0 0 1]?
Или, как правило, список целых чисел от 1 до n в n-мерный вектор нулей и единиц?В Octave/Matlab, как мне превратить [1,2,4,8] в [1 1 0 1 0 0 0 1]?
A = [ 1, 2, 4, 8];
B = false(1,A(end));
B(A) = true;
возвращается:
B =
1 1 0 1 0 0 0 1
и факультативные: B = double(B)
, если вам это нужно, как двойников.
или:
B = zeros(1,A(end));
B(A) = 1;
однако.
Почему вы инициализируете 'B'' numel (A) '? В приведенном примере вы бы инициализировали вектор 1x4, который не был спрошен. Просто 'B (A) = true' или' B (A) = 1' достаточно. – carandraug
@ carandraug: 'numel (A)' это вздор, это правильно. Но я бы сохранил инициализацию, чтобы убедиться, что все остальные значения '0' /' false' – thewaywewalk
все остальные значения по умолчанию ложны или ноль, вам не о чем беспокоиться. Если вы действительно хотите инициализировать 'B', который, как мне кажется, вам не нужно (присвоение значений другим индексам ** является ** инициализацией), используйте' max (A (:)) '. Инициализация в неправильном месте будет действительно хуже, поскольку назначение приведет к изменению размера. – carandraug