Как использовать функцию issparse? - PullRequest
0 голосов
/ 02 марта 2019

Разреженная матрица - это матрица, в которой большинство элементов равно нулю.Напротив, если большинство элементов отличны от нуля, то матрица считается плотной.Матрица A будет разреженной, если число элементов с нулевым значением, деленное на общее количество элементов, больше 0,5.

Я использую встроенную функцию issparse для проверки разреженности матрицыно эта функция дает 0 все время.

Как исправить этот код?

A = [0 0 0; 0 1 0; 1 0 0]; % Matrix-A
S = issparse(A); % Checking Matrix-A is sparse  
if S == 1
   disp('Matrix-A is Sparse Matrix\n')
else
   disp('Matrix-A is Dense Matrix\n')
end

Вывод:

Матрица-А является плотной матрицей

Почему

1 Ответ

0 голосов
/ 02 марта 2019

Согласно документации issparse (выделено мое):

TF = issparse(S) возвращает логическую 1 (true), если класс хранения из S равно sparse и логическому 0 (false) в противном случае.

То, что вы называете разреженной матрицей в математике, не обязательно является разреженной матрицей в MATLAB.В MATLAB даже матрица со всеми нулями может быть плотной матрицей, а матрица со всеми ненулями может быть разреженной матрицей.Тем не менее, целью разреженных матриц в MATLAB является уменьшение объема требуемой памяти путем хранения только ненулевых элементов и их индексов.Прочитайте документацию ( здесь ), чтобы понять больше о создании разреженных матриц.

Примеры:

  • Следующее A матрица разрежена:

     A = sparse([1 1 1; 1 1 1; 1 1 1]);
    
    >> issparse(A)    
    ans =    
      logical    
       1
    
  • Следующая матрица B плотная:

    B = [0 0 0; 0 0 0; 0 0 0];
    
    >> issparse(B)    
    ans =    
      logical    
       0 
    

Итак, что у вас есть вВаше рабочее пространство представляет собой плотную матрицу.Ваш ожидаемый результат может быть получен путем явного расчета доли, т.е.

if nnz(A)/numel(A) <= 0.5
   disp('Matrix-A is Sparse Matrix\n');
else
   disp('Matrix-A is Dense Matrix\n');
...