2008-10-20 31 views

Trả lời

3

Tôi đã lưu nó dưới dạng văn bản bằng Java trong MATLAB. Mã MATLAB:


pw=java.io.PrintWriter(java.io.FileWriter('c:\\retail.txt')); 
line=num2str(0:size(data,2)-1); 
pw.println(line); 
for index=1:length(data) 
    disp(index); 
    line=num2str(full(data(index,:))); 
    pw.println(line); 
end 
pw.flush(); 
pw.close(); 

Đây data là một ma trận thưa thớt vô cùng lớn.

+1

Tôi đang bối rối - tại sao bạn sử dụng java.io thay vì MATLAB được xây dựng trong fopen và fprintf? – SCFrench

+0

có lẽ bởi vì tôi biết java tốt hơn so với MATLAB, và nó là một mã ném đi, vì vậy nó không cần phải đẹp. nó chỉ cần thiết để hoạt động chính xác :) – Midhat

2

Bạn đã thử phân vùng chưa?

Tôi muốn thử gọi đầy đủ() trên 1000 hàng đầu tiên (hoặc 5000) và sau đó lặp lại quy trình nếu nó hoạt động.

+0

vâng luôn thats một tùy chọn, nó có thể sẽ mất rất nhiều thời gian viết ascii khối và sáp nhập chúng sau – Midhat

6

Lưu ma trận thưa thớt dưới dạng tệp .mat. Sau đó, trong chương trình khác, hãy sử dụng thư viện phù hợp để đọc tệp .mat.

Ví dụ: nếu chương trình khác được viết bằng Python, bạn có thể sử dụng chức năng scipy.io.mio.loadmat, hỗ trợ mảng thưa thớt và cung cấp cho bạn ma trận khối ô uế thưa thớt.

+1

chương trình khác là rapidminer – Midhat

0

Nếu đây là thỏa thuận một lần, thì tôi sẽ lặp qua ma trận và ghi ma trận vào tệp ASCII bằng vũ lực, hoặc sử dụng đề xuất @Veynom's và gọi đầy đủ() trên một tập con các hàng . Nó có thể mất một lúc, nhưng nó có thể sẽ được thực hiện nhanh hơn nó có thể làm để tìm hiểu làm thế nào để đọc trong một tập tin .mat bên ngoài môi trường MATLAB.

Nếu đây là điều bạn cần thực hiện định kỳ, tôi sẽ làm theo lời khuyên của @Vebjorn và sử dụng thư viện để đọc tệp .mat.

1

Sử dụng find chức năng để có được các chỉ số của các yếu tố khác không ...

idcs = find(data); 
vals = data(idcs); 
...save the index vector and value vector in whatever format you want... 

Nếu bạn muốn, bạn có thể sử dụng ind2sub để chuyển đổi các chỉ số tuyến tính để chèo, subscript cột.

Nếu bạn cần tạo lại ma trận thưa thớt trong MATLAB từ giá trị + giá trị con trỏ, hãy sử dụng spconvert.

26

Bạn có thể sử dụng tìm để có được chỉ số & vectơ giá trị:

[i,j,val] = find(data) 
data_dump = [i,j,val] 

Bạn có thể tái tạo lại dữ liệu từ data_dump với spconvert, mà có nghĩa là để "Nhập từ định dạng bên ngoài ma trận thưa thớt" (vì vậy tôi đoán đó là một tốt định dạng xuất khẩu):

data = spconvert(data_dump) 

Bạn có thể tiết kiệm để ascii với:

save -ascii data.txt data_dump 

Nhưng điều này bãi chỉ số như tăng gấp đôi, bạn có thể viết nó ra độc đáo hơn với fopen/fprintf/fclose:

fid = fopen('data.txt','w') 
fprintf(fid,'%d %d %f\n', transpose(data_dump)) 
fclose(fid) 

Hope this helps.

+4

Dữ liệu_dump trong lệnh fprintf nên được chuyển đổi trước khi sử dụng theo các tài liệu (http://www.mathworks.com/help/matlab/ref/fprintf.html). Điều này xảy ra vì dữ liệu được viết theo thứ tự collumn. –

+1

Tôi đã chỉnh sửa trong phần chỉnh sửa @AlanCN được đề xuất. – Joel

1

dlmwrite - Viết ma trận để ASCII được phân định tập tin Cú pháp

dlmwrite (filename, M)

dlmwrite (filename, M, 'D')

dlmwrite (filename, M , 'D', R, C)

dlmwrite (tên tệp, M, 'attrib1', value1, 'attrib2', value2, ...)

dlmwrite (filename, M, '-Nối')

dlmwrite (filename, M, '-Nối', danh sách thuộc tính-giá trị)

Các vấn đề liên quan