#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