3 ответов:
x(end+1) = newElemнемного более надежной.
x = [x newElem]будет работать только еслиx- это вектор строки, если это вектор столбцаx = [x; newElem]должен быть использован.x(end+1) = newElem, однако, работает для строк и столбцов-векторов.в целом, однако, растущих векторов следует избегать. Если вы будете делать это часто, это может привести ваш код к обходу. Подумайте об этом: рост массива включает в себя выделение нового пространства, копирование всего, добавление нового элемента и очистку старого беспорядок...Совершенно пустая трата времени, если вы знали правильный размер заранее :)
просто чтобы добавить к ответу @ThijsW, существует значительное преимущество скорости для первого метода по сравнению с методом конкатенации:
big = 1e5; tic; x = rand(big,1); toc x = zeros(big,1); tic; for ii = 1:big x(ii) = rand; end toc x = []; tic; for ii = 1:big x(end+1) = rand; end; toc x = []; tic; for ii = 1:big x = [x rand]; end; toc Elapsed time is 0.004611 seconds. Elapsed time is 0.016448 seconds. Elapsed time is 0.034107 seconds. Elapsed time is 12.341434 seconds.Я получил эти времена работает в 2012b однако, когда я запустил тот же код на том же компьютере в matlab 2010a я получаю
Elapsed time is 0.003044 seconds. Elapsed time is 0.009947 seconds. Elapsed time is 12.013875 seconds. Elapsed time is 12.165593 seconds.Так что я думаю, что преимущество скорости относится только к более поздним версиям Matlab
Как упоминалось ранее, использование
x(end+1) = newElemимеет то преимущество, что он позволяет объединить ваш вектор со скаляром, независимо от того, транспонирован ли ваш вектор или нет. Поэтому он более надежен для добавления скаляров.однако не следует забывать, что
x = [x newElem]также будет работать при попытке добавить несколько элементов одновременно. Кроме того, это обобщает немного более естественно для случая, когда вы хотите объединить матрицы.M = [M M1 M2 M3]
в целом, если вы хотите решение, которое позволяет объединить существующие вектор
xСnewElemэто может быть или не быть скаляром, это должно сделать трюк:x(end+(1:numel(newElem)))=newElem
Comments