2013-08-12 29 views
5

Tôi thường xuyên phải xuất nhiều số (hàng trăm) vào một tệp. Hiện tại tôi sử dụngXuất hình MATLAB rất chậm so với R

print('-dpsc2', outfile, '-append'); 

Mã của tôi sử dụng một con số ẩn duy nhất đang được sử dụng lại cho mỗi hình mới.

Bây giờ, vấn đề là tôi có thể đạt được tốc độ xuất tối đa khoảng 8 con số mỗi giây. Trong R, bạn có thể dễ dàng vẽ khoảng 200 hình trên giây. Có ai có bất cứ đề nghị làm thế nào để (đáng kể) tăng tốc độ khả năng xuất khẩu của MATLAB?

Jan

+0

Tôi nghi ngờ rằng nó có thể là hình vẽ và âm mưu * thế hệ *, chứ không phải là hành vi * in * chúng, điều đó rất chậm. Ít nhất, có vẻ như bạn đã không thực hiện công việc để cô lập thời gian cần thiết để * in * từ thời gian cần thiết để * tạo * biểu đồ. Tôi nói rằng bởi vì tôi có thể thấy rằng bạn * không * đi qua một xử lý trong cuộc gọi của bạn để in (xem, ví dụ, đối số ** xử lý ** được mô tả tại http://www.mathworks.com/help/ matlab/ref/print.html). Tôi đặt cược rằng nếu bạn đăng các mã để tạo ra các đồ thị, chúng tôi có thể giúp bạn tăng tốc độ đó lên khá một chút. Hoặc, bạn có thể tự mình sử dụng MATLAB Profiler. –

+0

@BobGilmore: Không. Chỉ cần in những hình ảnh đơn giản nhất đến postscript mất khoảng 0,11 đến 0,13 giây ngay cả khi máy tính nhanh, cho dù tôi có chuyển sang chế độ 'in' hay không. – horchler

+0

Cảm ơn @BobGilmore. Trên thực tế, nó thực sự về xuất khẩu, không phải về thế hệ. Bạn có thể thấy điều này nếu bạn chỉ xuất cùng một hình một lần nữa và một lần nữa: 'hình; cốt truyện (rand (10,10)); tic; cho i = 1: 100 in ('- dpsc2', 'test.ps', '-append'); kết thúc; toc' mất khoảng 10 giây trên máy của tôi. – Jan

Trả lời

6

Tôi cảm thấy đau đớn của bạn. Vấn đề này cũng là lý do tại sao chức năng getframe để tạo phim là không hiệu quả. Cách duy nhất tôi biết xung quanh nó là viết một hàm đơn giản gọi hàm mức thấp hardcopy. Dưới đây là an example of this for image-based graphics cùng với một số thông báo. Chức năng hardcopy hỗ trợ cả các 'dpsc2' và các tùy chọn 'append' rằng print làm:

hardcopy(gcf,'outfile.ps','-dpsc2','-append'); 

Trong khi print(gcf,'-dpsc2', 'outfile.ps', '-append'); mất khoảng 0,12 giây, mất trên chỉ 0,004 giây trên máy tính của tôi!

Nếu bạn làm help hardcopy bạn sẽ không nhận được nhiều thông tin. Tuy nhiên, nếu bạn cần thiết kế lại bất kỳ thứ gì, bạn có thể đọc mã cho print (edit print) hoặc các chức năng riêng tư khác mà nó gọi (ví dụ: edit private/render, edit private/paperfig, edit private/ghostscript).

+0

Cảm ơn! Thật đáng kinh ngạc! Đối với mã vạch của tôi, tôi thực sự có thể thay thế cuộc gọi 'print' của mình bằng một cuộc gọi' hardcopy' và nó hoạt động tốt. Chỉ có một đặc tính: Để có được nền trắng, tôi phải gọi lệnh thay đổi màu làm lệnh đồ họa cuối cùng ngay trước khi xuất. Cảm ơn một lần nữa! – Jan

+0

Không chắc chắn nếu điều này áp dụng cho bạn, nhưng vòng lặp unrolling có thể có thể giúp bạn ra là tốt. – Veridian

+0

@ starbox: Không chắc chắn liệu điều này có hiệu quả hay không. Tôi profiled 'in' và nó chỉ dành nhiều thời gian trong việc chuẩn bị con số cho xuất khẩu. 'hardcopy' dường như là một lệnh trong chính cốt lõi của nó. – Jan