Для хранения значений цикла в MATLAB - PullRequest
0 голосов
/ 23 октября 2018

Я задавал подобный вопрос раньше, см.

Двойной цикл for в MATLAB, хранение информации

Я сохраняю результаты цикла for, нона этот раз мои номера цикла for не увеличиваются на единицу каждый раз.

%% 
for q = [25,50,100,250,500,5000]

ActualTable(:,q)=ActualValues;
end

Как вы увидите, этот код выполняется, но он содержит большие части строк в матрице ActualTable, которые содержат только 0. Я бы хотел, чтобы строки содержали ненулевое значение.Таким образом, он сохраняет каждую строку от 25 до 5000 и только вставляет мои значения в строки 25, 50, 100 и т. Д., А все остальные строки содержат ноль.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я предполагаю, что с учетом того, что у вас есть это, ActualValues ​​- только 1 значение каждый раз.Проблема с вашим кодом в том, что q имеет инкременты, отличные от 1. Решение состоит в том, чтобы добавлять значение в конце каждый раз или использовать счетчик.

Добавление:

ActualTable = [];
for q = [25,50,100,250,500,5000]
ActualTable(end+1)=ActualValues;
end

Количество:

ActualTable = [];
c = 1;
for q = [25,50,100,250,500,5000]
ActualTable(c)=ActualValues;
c = c+1;
end

Обратите внимание, что изменение длины массива каждый раз не является хорошей практикой кодирования.Если вы знаете, сколько будет конечных значений, вам следует создать экземпляр ActualTable с такой длиной.

0 голосов
/ 23 октября 2018
for q = [25,50,100,250,500,5000]
    ActualTable(:,q)=ActualValues;
end

Это говорит о том, что MATLAB должен выполнить цикл по q, где q имеет шесть возможных значений.Если q=25, внутренний вызов сохранит ActualValues в столбце q, который, как только что сказано, 25. Поэтому, конечно, используя этот массив q, вы получите N -by- 5000 матрица, поскольку последний столбец, в котором вы пытаетесь что-то сохранить, равен 5000, а MATLAB не делает швейцарский сыр в матрицах.

Вместо этого циклически монотонно увеличивайте индекс:

for ii = 1:numel(q)
    ActualTable(ii,:) = ActualValues(q(ii),:); % You said rows, let's use rows then
end

Таким образом, у вас есть всего 6 строк, начиная с numel(q)=6, и вы получаете данные на основе ii-го значения q из ActualValues.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...