Это, похоже, очень распространенная моя проблема:
data = [1 2 3; 4 5 6];
mask = [true false true];
mask = repmat(mask, 2, 1);
data(mask) ==> [1; 4; 3; 6]
То, что я хотел, было [1 3; 4 6]
.
Да, я могу просто reshape
получить нужный размер, но это кажется неправильным способом сделать это. Есть ли способ лучше? Почему data(mask)
не возвращает матрицу, если она на самом деле прямоугольная? Я понимаю, что в общем случае это может быть не так, но в моем случае, поскольку моя первоначальная маска - это массив, она всегда будет.
Следствие
Спасибо за ответ, я просто хотел отметить, что это также работает со всем, что возвращает числовой индекс, например ismember
, sort
или unique
.
Раньше я брал второе возвращаемое значение из sort
и применял его к каждому столбцу вручную, когда вы можете использовать это понятие, чтобы сделать его одним выстрелом.