2015-04-11 4 views
1

Я мог бы также спросить, как сбросить разреженную матрицу в CSV, в основном у меня есть график, представленный как разреженная матрица, и я хочу экспортировать график в CSV, чтобы открыть его в Gephi. Так что моя разреженная матрица является чем-то вроде:Как сбросить ненулевые элементы разреженной матрицы в нераспределенную матрицу

(23,35) 1 

(35,78) 1 

(78,23) 1 

и т.д.

Я хотел бы преобразовать это в вектор, как: [23,35,1;35,78,1;78,23,1]

Я хотел бы знать, есть простой один лайнер сделать но я не могу заставить мой мозг найти это так, спасибо за помощь.

Если в качестве альтернативы известный как-то sparse2csv('graph.csv',Adj), который будет генерировать в файле:

23,35,1 

35,78,1 

78,23,1 

Тогда это будет работать тоже.

ответ

3

Путь, который приходит на ум, это не один вкладыш (хотя он легко может быть один с помощью функции), а просто использует два вызова функции: find и nonzeros:

A  = sparse([23;35;78],[35;78;23],[1;1;1]); 
[r,c] = find(A~=0); 
v  = nonzeros(A); 
compact = [r,c,v]; 
disp(compact); 

который возвращает

78 23  1 
23 35  1 
35 78  1 

Как Луис Mendo указывает в комментариях, более простое решение существует, так как find возвратит ненулевое значение в трети (данный массив больше не является логическим либо сейчас):

[r,c,v] = find(A); 
compact = [r,c,v]; 
+0

Спасибо! Я все еще не могу поверить, что для этого есть одна функция линии. Возможно, это не так часто :) – user3635284

+0

@ user3635284 Хорошо, что только популярное использование этой потенциальной функции (о которой я могу думать) предназначено для экспорта в текстовый файл. – TroyHaskin

+2

Возможно, проще: '[r, c, v] = find (A);' (не нужно «ненулевых») –

Смежные вопросы