Это, кажется, очень распространенная проблема у меня:Как сжать матрицу, используя маску массива в MATLAB?
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
и применил его к каждому столбцу вручную, когда вы можете использовать это понятие, чтобы сделать это одним выстрелом.
Спасибо, я знал, что это было что-то простое. Никогда не рассматривал использование понятия: с маской. Я использовал только один индекс. – Pyrolistical