Как я могу найти векторные элементы, которые удовлетворяют условию вектора X длиной 1: 1000, а именно X> 10?

#matlab

#matlab

Вопрос:

Код следующий:

 for i = 1:1000

        x1 = TMP(i).SonarReturnData.BeamsOutput([1:200],[25]);
        x2 = TMP(i).SonarReturnData.BeamsOutput([1:200],[26]);
        x3 = TMP(i).SonarReturnData.BeamsOutput([1:200],[27]);
        x4 = TMP(i).SonarReturnData.BeamsOutput([1:200],[28]);
        x5 = TMP(i).SonarReturnData.BeamsOutput([1:200],[29]);
        x6 = TMP(i).SonarReturnData.BeamsOutput([1:200],[30]);
        x7 = TMP(i).SonarReturnData.BeamsOutput([1:200],[31]);
        x8 = TMP(i).SonarReturnData.BeamsOutput([1:200],[32]);
        x9 = TMP(i).SonarReturnData.BeamsOutput([1:200],[33]);
        x10 = TMP(i).SonarReturnData.BeamsOutput([1:200],[34]);
        x11 = TMP(i).SonarReturnData.BeamsOutput([1:200],[35]);
        X = (x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11)/11;
        S(i) = X(X>10); 

end  

        plot(S);
  

И я получаю следующую ошибку:

 Improper assignment with rectangular empty matrix.

Error in open83B_edited_3 (line 189)
  S(i) = X(X>10);  
  

Может ли кто-нибудь помочь найти способ избежать этой ошибки? Спасибо.

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

1. Какой тип данных S ? Вот в чем ваша проблема. MATLAB считает, что S это одномерный массив, когда вы пытаетесь назначить 2D-массив для каждого местоположения S . Не могли бы вы, пожалуйста, показать больше кода?… особенно там, где вы объявляете S ? Кроме того, если вы можете предоставить больше информации о том, почему вы делаете X(X > 10) и что это должно делать, мы можем предложить альтернативы, чтобы сделать это совместимым с S , если одномерный массив действительно то, что вам нужно. Для начала, возможно, создайте S массив ячеек.

2. Не ваш вопрос, но замените всю верхнюю часть цикла этим: X = mean(TMP(i).SonarReturnData.BeamsOutput(1:200, 25:35), 2);

3. Спасибо за ваш ответ. Я хочу, чтобы S был вектором, который содержит значения (элементы) больше 10. S генерируется из X (что является средним значением для 11 векторов). 11 векторов — это: TMP(i). SonarReturnData. Вывод луча([1:200],[25]…[35]), которые представляют собой векторы от 200by25 до 200by35. Мне нужно найти и представить все значения больше 10 в пределах S.

4. @user3611812 — Создайте S cell массив. Укажите, что S должно быть S = cell(1,1000); , затем замените S(i) = X(X > 10); на быть S{i} = X(X > 10); . Это приведет к тому, что каждый элемент будет неравномерным. Затем вы можете получить доступ к каждому вектору, выполнив S{1}, S{2}, ... и т.д.

5. Вам нужно будет поступить так, как предлагает rayryeng, потому что количество элементов, которые вы хотите поместить в S (i), является переменным, т. е. потенциально разным на каждой итерации цикла i. Затем вы могли бы написать цикл по массиву ячеек S, чтобы сгенерировать график в качестве постпроцесса.