Matlab - динамическая индексация - PullRequest
0 голосов
/ 26 июля 2011

В matlab я должен объявлять матрицу, и как мне это сделать? Например, могу ли я сделать

function res = compute()
  res(1) = 1;
  res(2) = 2;
end

или я должен сначала объявить res?

Ответы [ 3 ]

2 голосов
/ 27 июля 2011

Вам не нужно объявлять свои матрицы в Matlab. Ваш код будет работать.

Как правило, быстрее, если вы предварительно выделяете память, используя ones или zeros для своих матриц. В противном случае Matlab должен продолжать перераспределять память при изменении размера матрицы.

Пример

% Slow
x(1) = 3; % x is now 1 by 1
x(5) = 9; % Matlab has to reallocate memory to increase x to be 1 by 5
x(10) = 2; % And another reallocation to increase x to be 1 by 10

% Better
y = zeros(1,10); % preallocate memory for the matrix
y(1) = 3;
y(5) = 9;
y(10) = 2;

% One-liner
z([1 5 10]) = [3 9 2]; % you can assign multiple values at once

Preallocation помогает больше всего, когда вам нужно использовать циклы

a = zeros(1,100)
for i=1:100
    a(i) = i^2;
end

Еще лучше, если вы можете векторизовать код, чтобы вам не приходилось использовать цикл for

a = (1:100).^2;
1 голос
/ 27 июля 2011

Вам не нужно объявлять массив / матрицу. То, что у вас есть сейчас, будет работать.

Вы всегда можете объявить пустую матрицу с помощью matrix = []

Даже безумнее, вы можете делать такие вещи, как

a(2,3) = 7

в результате

a =

     0     0     0
     0     0     7
1 голос
/ 27 июля 2011

Да. Есть много способов, вы можете начать с изучения, как объявлять массивы здесь .

В вашем случае похоже, что вы пытаетесь сделать что-то вроде:

res = [1,2]

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