Это не работает из-за того, что вы указали в sim_results
. Более того, вы можете посмотреть ссылку this на логические операторы, поскольку в вашем случае вы, скорее всего, захотите использовать &
вместо короткого замыкания &&
. То есть, если вы считаете это выражение:
expr1 && expr2
expr2
Тогда не будет оцениваться, если expr1
ложно. Суть в том, что с использованием кода вы, скорее всего, получите ошибку Operands to the || and && operators must be convertible to logical scalar values.
, поскольку оператор &&
работает только со скалярными логическими условиями, то есть когда вы можете суммировать условие как истинное или ложное, что не так, когда вы сравниваете например, массив или матрица.
Так, чтобы вернуться к вашему вопросу, я рекомендую делать одно из следующих действий:
Решения 1: Векторизованный код
Здесь вам не нужен цикл с момента каждой операции вы используете может быть Векторизованных:
s1 = rand(100,1)*.1+.1;
s2 = rand(100,1)*.2+.2;
s3 = rand(100,1)*.3+.3;
s4 = s1 + s2.*s3;
sim_results = [s1 s2 s3 s4];
x = find(s4 > .1 & s4 < 0.4) %// Get row indices for your condition
Result = sim_results(x,:)
Простой пример с 5 строк (я использовал условие s4> 0,4 & s4 < 0.4):
sim_results =
0.1760 0.3303 0.4169 0.3137
0.1584 0.3487 0.5326 0.3441
0.1403 0.2604 0.3538 0.2324
0.1510 0.2179 0.3328 0.2235
0.1496 0.3652 0.5715 0.3583
x =
1
2
5
Result =
0.1760 0.3303 0.4169 0.3137
0.1584 0.3487 0.5326 0.3441
0.1496 0.3652 0.5715 0.3583
Решение 2: Использование временной переменной
Здесь вы можете назначить переменную на 4-й колонке sim_results
и применять операторы, как описано выше:
for i = 1:100;
s1 = rand(1)*0.1+0.1;
s2 = rand(1)*0.2+0.2;
s3 = rand(1)*0.3+0.3;
s4 = s1+s2*s3;
sim_results(i,:) = [s1 s2 s3 s4];
end
TempVar = sim_results(:,4);
x1 = find(TempVar > .1 & TempVar < 0.4)
Result = sim_results(x1,:)
Надежда, что помогает!
Спасибо @ Benoit_11. Я хочу получить матрицу с соответствующими столбцами для s1, s2 и s3, когда s4> 0,1 $ s4 <0.4. Как я могу это сделать? Еще раз спасибо. – user2861089