Matlab — удаление ненужных строк в массиве

#arrays #matlab #matrix #rows

#массивы #matlab #матрица #строки

Вопрос:

Я сравниваю значение 100 x 1, называемое «x», со значением из матрицы 4 x 1, называемой «xCP». Мне нужна finalMatrix только со значениями в x, которые выше третьего значения из xCP. Однако приведенный ниже код предоставляет мне матрицу размером 100 x 1 с нулями в строках, значение которых не больше. Мне нужны только 25 (например) строк в finalMatrix, которые имеют более высокое значение. Итак, моя finalMatrix должна иметь размер 25 x 1 со значениями вместо 100 x 1 с 25 значениями и 75 нулями.

Это то, что у меня есть до сих пор:

 K = size (x)
length = K(1)
finalMatrix = zeros(length,1);

count = 1;
for i=1:length;
    if x(count,1) >= xCP(3)
    finalMatrix(count,1) = x(count,1);
    end
    count =count 1;
end
  

Спасибо!

Комментарии:

1. finalMatrix = x(x>xCP(3)) ? Основная идея состоит в том, чтобы проиндексировать в x с помощью того логического массива единиц и нулей, который у вас был, используя таким образом logical indexing .

Ответ №1:

Вы можете добавить finalMatrix(count 1:length,1) = [] в конце кода. Это удалит лишние элементы.

Комментарии:

1. Не могли бы вы, пожалуйста, объяснить эту строку кода? Я хочу внести ясность, чтобы помнить, как это делать в будущем.

2. [] Идиома очень популярна в MATLAB. Когда вы это сделаете, [] это удалит элементы, которые указаны в вашей матричной / векторной индексации. Например, если вы сделали x = 1:10; , затем сделали x(1:4) = []; , первая инструкция создает массив из 10 элементов, перечисленных с 1-10. Вторая инструкция физически удалит первые четыре элемента из x . Таким образом, если вы проверите x еще раз, вы увидите, что массив содержит только элементы из 5-10. В этом будет шесть x элементов, в отличие от 10 ранее.

3. Понятно. Спасибо rayryeng и ja72