2012-02-08 31 views
14

Tôi hiện đang tạo mẫu một số thuật toán trong Matlab dựa trên ma trận, DSP, thống kê và chức năng phân tích hình ảnh.Thư viện số nào được sử dụng để chuyển từ Matlab sang C++?

Một số ví dụ về những gì tôi có thể cần:

  • vector riêng
  • chập trong 2D và 3D
  • FFT
  • ngắn Time Fourier Transform
  • Hilbert transform
  • Đa thức Chebyshev
  • bộ lọc thông thấp
  • ngẫu nhiên số gaussian đa biến
  • kmeans

Sau đó tôi sẽ cần phải thực hiện các thuật toán trong C++.

Tôi cũng có giấy phép cho Bí quyết số trong C++, mà tôi thích vì nó được tài liệu hóa và có nhiều thuật toán. Tôi cũng tìm thấy một lớp học giúp gói các hàm NR trong MEX: nr3matlab.h. Vì vậy, bằng cách sử dụng lớp này tôi sẽ có thể tạo ra hàm bao cho phép tôi gọi các hàm NR từ Matlab. Điều này rất quan trọng với tôi, để tôi có thể kiểm tra từng bước khi chuyển từ Matlab sang C++. Tuy nhiên Bí quyết Numerical trong C++ có một số thiếu sót quan trọng:

  • thuật toán thực hiện trong một đơn giản, và không nhất thiết phải rất hiệu quả cách
  • không ren

do đó tôi đang xem xét sử dụng một thư viện số. Thư viện lý tưởng nên:

  • như rộng trong phạm vi và chức năng càng tốt
  • được ghi lại cũng
  • (có hỗ trợ thương mại)
  • đã thực hiện Matlab wrappers
  • rất mạnh mẽ
  • rất hiệu quả
  • luồng
  • (có một thực hiện GPU có thể được quay trên thay vì CPU với một "công tắc")

Những thư viện số (thư viện), bạn sẽ đề nghị?

Cảm ơn trước vì bất kỳ câu trả lời nào!

+2

Liệt kê một số hàm/thuật toán cụ thể mà bạn đang tìm kiếm, ngay bây giờ câu hỏi này quá mơ hồ. –

+0

Cảm ơn. Liệt kê một số điều nảy sinh trong tâm trí. – Andy

+0

Chỉ nghĩ rằng tôi muốn đề cập đến để tham khảo trong tương lai mà các câu hỏi như thế này tìm thấy một ngôi nhà tốt trên [scicomp.SE]. –

Trả lời

3

Thực ra bạn nên xem openCV.

Mặc dù mục tiêu đầu tiên là xử lý hình ảnh/xử lý hình ảnh, thư viện này có rất nhiều công cụ đại số tuyến tính (Hầu như tất cả những gì bạn yêu cầu). Lúc đầu, thư viện này đã được thực hiện bởi intel, với rất nhiều tập trung vào hiệu suất. Nó có thể xử lý đa luồng, IPP, ... Cú pháp này dễ sử dụng hơn thư viện C++ thông thường.

Bạn nên xem điều này cheat sheet. Cú pháp đã được thay đổi kể từ phiên bản 2.0 để bắt chước MATLAB. Thư viện này được sử dụng rộng rãi và hoạt động tốt (bản cập nhật lớn cuối cùng tháng 8 năm 2011).

+0

Tôi ngạc nhiên khi bạn đề xuất OpenCV thay vì Eigen. – CroCo

3

NAG có thể là một lựa chọn tốt. Tải trọng của các tổ chức tài chính sử dụng nó trong các thư viện toán học của họ. Tuy nhiên, không có triển khai GPU, khi tôi sử dụng nó lần cuối.

+0

Cảm ơn. Nhìn rất tốt. Bạn có biết khoảng 1 giấy phép nhà phát triển có giá bao nhiêu không? – Andy

+0

@ Andreas Werner Paulsen - Google đã phát hiện ra điều này. http://www.eduserv.org.uk/lns/agreements/nag/nag-pricing. Bạn không chắc chắn nó giúp ích gì cho bạn. Các tổ chức giáo dục được định giá ưu đãi, có vẻ như từ trang web của họ. – DumbCoder

4

Bạn có một danh sách khá dài các yêu cầu và có thể khó khăn để trang trải tất cả các yêu cầu đó bằng một thư viện.

Để chuyển đổi Matlab-to-C++ chung, tôi có thể khuyên bạn nên Armadillo là thư viện C++ có khuôn mẫu tập trung vào đại số tuyến tính --- và tập trung nhất định giúp dễ dàng viết biểu thức giống như Matlab. Đây là một hoạt động rất tốt, được tài liệu hóa và duy trì tích cực. Bạn có thể bắt đầu ở đó và cố gắng điền vào các phần còn thiếu cho công việc của bạn.

+0

Cảm ơn. Cũng trông rất tốt. Tôi đặc biệt thích rằng nó được xây dựng trên Lapack trong khi chứng minh một giao diện dễ dàng hơn và giống như Matlab. – Andy

+0

Trên đầu trang của BLAS, là một giao diện. Vì vậy, bạn luôn có thể giảm BLAS nhanh hơn thay vì LAPACK mặc định. Và Conrad biết công cụ của mình và là một niềm vui để làm việc với. –

2

cũng có thư viện Eigen: http://eigen.tuxfamily.org nhưng chủ yếu được sử dụng như một phần của khung lớn hơn. Nó cung cấp đại số cơ bản (và phức tạp hơn một chút)

+0

Đó là một tour de lực lượng của c + + templating, nhưng biên dịch là chậm và các thông báo lỗi có thể được terribly dài (khủng khiếp * và * dài). – denis

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