2016-03-22 15 views
0

Matlab'da seyrek matrislerim var. 1'lerin pozisyonlarını matris sıralı ve sütun şeklinde kaydetmek istiyorum.Matlab matrisi Büyük matrisler için 1 konum kaydetme

Örneğin aşağıdaki matrisi düşünün:

0 1 0 1 0 
0 0 0 1 0 
0 0 0 0 0 
0 0 1 0 0 
1 0 0 0 0 

Ben iki dosya olarak yazılır edilmesini istediğiniz: satır wise.csv:

1,2 
1,4 
2,4 
4,3 
5,1 

kolon-wise.csv:

5,1 
1,2 
4,3 
1,4 
2,4 

Biliyorum ki, döngüsel veya sütunsal olarak bir döngü çalıştırabilir ve öğeyi fprintf kullanarak öğeye kaydedebilirim, ancak daha iyi bir yolu var mı? Çok büyük matrislerle uğraşıyorum ve bunu yapmanın verimli bir yolu nedir merak ediyorum?

cevap

2

Bu görevi gerçekleştirmek için find kullanmak isteyeceksiniz. Daha sonra bunları bir csv dosyasına yazmak için dlmwrite'u kullanabilirsiniz.

Sütun için, her 1'in satır endeksi ve sütun dizini olan iki sütunu (sütun ana sırada) find kullanabilirsiniz.

data = [0 1 0 1 0 
     0 0 0 1 0 
     0 0 0 0 0 
     0 0 1 0 0 
     1 0 0 0 0]; 

[row, col] = find(data); 
M = [row, col]; 
dlmwrite('column-wise.csv', M); 

Sonra sıra sıra sonucu elde etmek, sadece sortrows kullanarak daha sonra satır ve sütun göre sütun akıllıca bir sonuç sıralayabilirsiniz. Buna

dlmwrite('row-wise.csv', sortrows(M)) 

alternatif, verilerinizin devrik tekrar find yapmaktır (satır-majör sipariş zorlamak için) ama sortrows yaklaşım daha hızlı olduğunu düşünürdüm.

[col, row] = find(data.'); 
dlmwrite('row-wise.csv', [row, col]) 
+0

Teşekkür ederiz! Soruyu yayınladığım anda, çok yakında konuştuğumu fark ettim! Yine de teşekkürler. – kami