Tôi đang bắt đầu một dự án khoa học-tính toán mới trong C++ và kể từ khi có rất nhiều quy trình mở rộng, tôi đang cân nhắc sử dụng Armadillo hoặc Blitz ++ để xử lý mảng/ma trận/tensor hiệu quả. Cái nào tốt hơn để sử dụng?Armadillo vs Blitz ++
Trả lời
Chúng tôi đã rất hài lòng với Armadillo mà chúng tôi đã gói cho R sử dụng gói tích hợp Rcpp R/C++ --- gói kết quả là RcppArmadillo.
Conrad rất hữu ích và cam kết, và Armadillo đang được phát triển tích cực. Đó là sự hiểu biết của tôi rằng Blitz ++, trong khi con đường phá vỡ trong thời gian của nó và rất có ảnh hưởng đối với đại số tuyến tính theo khuôn mẫu, không còn được phát triển tích cực nữa.
Chỉnh sửa 2012-06-28: Rõ ràng có sự phát triển Blitz ++ mới đang diễn ra tại Sourceforge site for Blitz.
Chỉnh sửa 2017-12-16: Có vẻ như Blitz++ hiện đang ở GitHub.
Ai đó đã cố chỉnh sửa bài đăng của bạn ngay bây giờ nói rằng "Blitz ++ vẫn được phát triển và phiên bản 0.10 mới vừa được phát hành hôm nay" - bạn có thể xác nhận và nếu thay đổi đúng bài đăng của mình không? –
@ShadowWizard: Cảm ơn bạn đã đứng đầu, tôi vừa thực hiện chỉnh sửa sau khi tìm tệp. –
Dirk, Blitz cần được hỗ trợ. –
Như mọi khi trong trường hợp này, khi giao dịch với đại số tuyến tính và C++, tôi nhiệt liệt đề nghị xem xét Eigen.
http://eigen.tuxfamily.org/index.php?title=Main_Page
Có lẽ một trong những thư viện đại số tuyến tính C++ tốt nhất từng được viết theo ý kiến của tôi.
Tôi đang làm việc với Eigen vào lúc này và khá hài lòng với nó. –
Đến từ Matlab, Eigen trông hoàn toàn tuyệt vời! Làm thế nào mạnh mẽ là nó trong việc xác định một loại vector tùy chỉnh cho mỗi phần tử trong một mảng? Tôi muốn có thể sử dụng nó với các hình ảnh màu, nghĩa là các mảng "3D" có kích thước M * N * (đỏ, lục, lam). –
Tôi thấy rằng [Armadillo] (http://arma.sourceforge.net) nói chung làm tốt hơn với việc cung cấp các hàm/API giống như Matlab. Đối với mảng "3D", nó có [Cube class] (http://arma.sourceforge.net/docs.html#Cube). – mtall
Để hoàn chỉnh: Tôi khuyên bạn nên chống lại Boost :: uBLAS, chỉ trong trường hợp ai đó đang xem xét. Tôi đã sử dụng nó và API rất cồng kềnh và hiệu suất tổng thể thấp hơn Eigen và Armadillo; điều này thậm chí còn được đề cập trong phần Câu hỏi thường gặp của uBLAS
H: Tôi có nên sử dụng uBLAS cho các dự án mới không?
A: Tại thời điểm viết (09/2012), có rất nhiều thư viện ma trận tốt, ví dụ: MTL4, armadillo, eigen ... uBLAS cung cấp hiệu suất tốt (nhưng không nổi bật). Mặt khác, cải tiến lớn cuối cùng của uBLAS là vào năm 2008 và không có thay đổi đáng kể nào được cam kết kể từ năm 2009. Vì vậy, người ta nên tự hỏi mình một số câu hỏi để hỗ trợ quyết định: ... Dễ sử dụng? uBLAS rất dễ sử dụng cho những thứ đơn giản, nhưng cần kiến thức phong phú về C++ khi bạn rời khỏi đường dẫn. Hiệu suất? Có lựa chọn thay thế nhanh hơn. Cắt cạnh? uBLAS đã hơn 10 tuổi và bỏ lỡ tất cả những thứ mới từ C++ 11.
"Tôi bắt đầu một dự án khoa học-máy tính mới ..."
Armadillo API cố gắng bắt chước MATLAB cú pháp, mà tôi sẽ giả định bạn đã quen thuộc với.
Một điều mà tôi gặp phải làm việc với Ublas là nó không cung cấp tùy chọn để thực hiện hành động như max(u,0)
, u+1
, abs(u)
nơi u
là một vector. Ngoài ra, cú pháp của Boost Ublas là cồng kềnh để viết so với ARMADILLO. Có so sánh tốc độ quá [click] (Compare blitz++, armadillo, boost::MultiArray) Vì vậy, tôi khuyên bạn nên sử dụng Armadillo.
- 1. Armadillo C++: Có cách nào cụ thể để tạo ma trận tam giác hoặc đối xứng hiệu quả
- 2. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 3. Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
- 4. bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase, họ có điểm gì chung?
- 5. ACE vs Boost vs Poco vs wxWidgets
- 6. NetSqlAzMan vs AzMan vs (?????)
- 7. & vs * và | vs +
- 8. Mathematica: Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc etc
- 9. Htmlentities vs addslashes vs mysqli_real_escape_string
- 10. Delegate.CreateDelegate vs DynamicMethod vs Biểu
- 11. RazorEngine vs RazorTemplates vs RazorMachine
- 12. HttpRequest vs HttpRequestMessage vs HttpRequestBase
- 13. getchar_unlocked() VS scanf() VS cin
- 14. gruntjs vs yeoman vs guard
- 15. Coroutine vs Continuation vs Generator
- 16. DataView.RowFilter Vs DataTable.Select() vs DataTable.Rows.Find()
- 17. Shmem vs tmpfs vs mmap
- 18. Processing.js vs. CAKE vs. Raphael.js
- 19. Mongoose.model vs Connection.model vs Model.model
- 20. MySQL vs Firebird vs SQLite
- 21. window.onload vs. body.onload vs. document.onready
- 22. Selenium vs. SimpleTest vs. WatiN
- 23. Matlab vs Aforge vs OpenCV
- 24. select vs poll vs epoll
- 25. fadeIn vs fadeOut vs fadeTo
- 26. int vs NSNumber vs NSInteger
- 27. cụm vs Lưới vs Mây
- 28. flume vs kafka vs others
- 29. UrlByAppendingPathComponent vs UrlByAppendingPathComponent vs UrlByAppendingPathExtension
- 30. Bitmap vs ImageView vs Drawable
Bạn có thực sự ** cần nhiều đại số tuyến tính không? Nếu có, không sử dụng C++ (sử dụng Matlab hoặc tương đương). Nếu không, Armadillo sẽ rất tuyệt, và nếu bạn thực sự phải sử dụng C++ vì yêu cầu khác, nó có lẽ là lựa chọn tốt nhất.Tuy nhiên, tôi không bao giờ sử dụng nó để cho bạn biết (tôi đã sử dụng Blitz ++ và boost :: ublas với một số thất vọng mặc dù). –
Bạn đã xem thư viện Boost Math and Numerics (http://www.boost.org/doc/libs/?view=category_Math) chưa? – yasouser
"Cái nào tốt hơn": tốt hơn như thế nào - tốc độ thô (trên lớp * của tôi về các vấn đề), ổn định, ** thời gian để tìm hiểu **? Tôi muốn có một bảng nhỏ với các con số: các trang tài liệu, các dòng ví dụ, các dòng mã, để so sánh loại này. – denis