РЕДАКТИРОВАТЬ:
Поскольку вы говорите, что перед этой операцией вы использовали значительные ресурсы, вполне вероятно, что вы близки к критической точке, когда MATLAB выдает ошибку нехватки памяти.
Помните, что когда вы нарастаете матрицы на лету либо путем конкатенации, либо путем индексации вне диапазона, MATLAB создает копию матрицы в памяти.Таким образом, вы используете не только ресурсы для этой дополнительной строки, но и копию всей матрицы!
Вот пример на моей машине, где я пытаюсь вырастить вектор, достаточно большой, чтобы перевернуть его.ограничение памяти.
clear
a=rand(2*10^9+1,1); %#create a large array
whos a
Name Size Bytes Class Attributes
a 2000000001x1 16000000008 double
%#Now repeat the same, but by growing the array by one element
clear
a=rand(2*10^9,1);
a=[a;0];
??? Error using ==> vertcat
Out of memory. Type HELP MEMORY for your options.
Итак, вы видите, что, хотя MATLAB может создавать матрицу из 2*10^9+1
элементов за один раз, при попытке создать массив одинакового размера, добавив один элемент к 2*10^9
элемент вектора, ему не хватает памяти.
Если S
и T
, как вы говорите, являются векторами столбцов, то A=[A;S;T]
должно выдать ошибку:
???Ошибка при использовании ==> измерений аргументов CAT vertcat не согласованы.
Так что вы должны делать что-то еще.Конкатенация не изменит разреженность матрицы, т. Е. Она не переключится с разреженной на полную.
A=sprand(3560,3560,0.01); %#test matrices
S=rand(3560,1);
T=rand(3560,1);
B=[A,S,T]; %#join the columns
issparse(B)
ans =
1
Более того, матрица двойных чисел 3560x3560
составляет всего ~ 97 МБ, что не должно давать вамошибка "недостаточно памяти" ...