Я прочитал интересную статью о правильном использовании памяти в MATLAB. Вот оно: Link at official website И вот я вижу пример:Ошибка MATLAB вручную?
Если данные содержат много нулей, рассмотреть вопрос об использовании разреженных массивов, которые магазин только ненулевые элементы. В следующем примере сравнивается пространство , необходимое для хранения массива в основном нулей:
A = diag(1e3,1e3); % Full matrix with ones on the diagonal
As = sparse(A) % Sparse matrix with only nonzero elements
Я пытался реализовать в своем коде и найти интересный момент: A = diag(1e3,1e3)
не создают матрицу с единицами на диагонали ! Он создает матрицу нулей только с одним ненулевым элементом:
clear A
A = diag(1e3,1e3);
find(A);
ans =
1001001
A(1001001)
ans =
1000
Ok. Я читал о diag
функцию помощи и увидеть это:
D = Diag (v) возвращает квадратную диагональную матрицу с элементами вектора V на главной диагонали.
Ok! Поэтому он действительно не создает диагональную матрицу, если v
состоит из 1 элемента! Это ошибка при помощи? НО. Еще один вопрос: почему он работает таким образом?
diag(5,5)
ans =
0 0 0 0 0 5
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
Я ожидаю, чтобы получить матрицу 5х5 с 5
значением в точке (1,1) или (5,5). Почему он создает матрицу 6x6 и почему 5
является элементом (1,6)?
Некоторое время назад они исправляют документацию:
AH, конечно же, обязательно! Глупая ошибка! Но как насчет помощи? Это действительно ошибка? –
Где это было бы ошибкой? это явно, как описано там. У меня есть опечатка в моем ответе, хотя она должна быть A (1,6) не A (1,5). Это связано с тем, что основная диагональ считается равной 0. поэтому пятая диагональ начинается с индекса A (1,6) –
Да, я понимаю. Но посмотрите на это: 'A = diag (1e3,1e3); % Полная матрица с единицами по диагонали. Он не имеет диагоналей. –