Tôi có ma trận thưa thớt 30000x14000 trong MATLAB (phiên bản 7), mà tôi cần sử dụng trong một chương trình khác. Tính năng lưu cuộc gọi sẽ không viết mã này dưới dạng ASCII (không được hỗ trợ). Gọi full()
về con quái vật này dẫn đến lỗi Out of Memory
.
Làm cách nào để xuất?Làm thế nào tôi có thể lưu ma trận thưa thớt MATLAB rất lớn vào một tệp văn bản?
Trả lời
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.
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.
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
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.
chương trình khác là rapidminer – Midhat
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.
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
.
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.
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. –
Tôi đã chỉnh sửa trong phần chỉnh sửa @AlanCN được đề xuất. – Joel
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ị)
- 1. Làm thế nào để Matlab transpose một ma trận thưa thớt?
- 2. k-có nghĩa là phân cụm trong R trên ma trận rất lớn, thưa thớt?
- 3. R: chuyển đổi ma trận thưa thớt
- 4. Đảo ngược ma trận thưa thớt lớn với scipy
- 5. csv vào ma trận thưa thớt trong python
- 6. tối thiểu của ma trận thưa thớt?
- 7. Tạo ma trận đường chéo thưa từ hàng của ma trận thưa thớt
- 8. Đang tải ma trận thưa thớt Matlab được lưu với -7.3 (HDF5) vào Python và thao tác trên nó
- 9. Hoạt động ma trận thưa thớt trên CUDA
- 10. Làm thế nào để song song các phép nhân ma trận thưa thớt scipy
- 11. Thư viện Fortran 90/95 cho ma trận thưa thớt?
- 12. Hiệu quả nhân các ma trận rất lớn trong MATLAB
- 13. Thư viện ma trận thưa thớt cho Ruby
- 14. nhân ma trận numpy để lưu trữ hình tam giác/thưa thớt?
- 15. Làm cách nào để lưu ma trận các số nguyên vào một tệp văn bản trong Matlab?
- 16. Cách nhanh nhất có thể để lưu ma trận Matlab
- 17. Scarse thưa thớt ... mảng?
- 18. làm thế nào để bộ nhớ bản đồ một ma trận rất lớn?
- 19. cách hiệu quả để lấy tối đa mỗi hàng cho ma trận thưa thớt lớn
- 20. Java thực hiện phân tách giá trị số ít cho các ma trận thưa thớt lớn
- 21. Cách tốt nhất để lưu trữ ma trận thưa thớt trong .NET
- 22. Làm cách nào để tính phương sai của cột của ma trận thưa thớt trong Scipy?
- 23. Làm cách nào để loại bỏ zeroes hiệu quả khỏi ma trận (không thưa thớt)?
- 24. Thêm giá trị vào ma trận thưa thớt Scipy với chỉ mục và giá trị
- 25. Ma trận thưa thớt scipy - mục đích và cách sử dụng các triển khai khác nhau
- 26. cách hiệu quả để tạo ra một ma trận thưa thớt chéo
- 27. Làm cách nào để tôi có thể viết chuỗi và ma trận vào tệp .txt trong MATLAB?
- 28. Lưu trữ ma trận lớn nhưng cấp thấp hiệu quả
- 29. Scipy: Các ma trận thưa thớt có hỗ trợ lập chỉ mục nâng cao không?
- 30. Cách hiệu quả để chuẩn hóa một Ma trận thưa thớt Scipy
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
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