#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, чтобы сгенерировать график в качестве постпроцесса.