2008-10-13 38 views
11

Tôi cần thư viện nhẹ cho 2d & vectơ 3d và 3x3 & Ma trận 4x4. Trong cơ bản C. Chỉ vì vậy tôi không phát minh lại bánh xe suboptimally.Đề xuất cho thư viện ma trận và véc tơ nhỏ dựa trên c

Mọi đề xuất?

+0

Xem thêm: [** Có một cách dễ dàng để sử dụng vector/ma trận/quaternion thư viện toán học trong C thuần túy? (đã đóng) **] (http://stackoverflow.com/questions/12659579/is-there-an-easy-to-use-vector-matrix-quaternion-math-library-in-pure-c) –

Trả lời

8

Meschach là một c-chỉ thư viện vector/ma trận, nhỏ hơn so với ví dụ đáng kể LAPACK (theo Câu hỏi thường gặp, ít nhất là :)

+0

Nếu bạn không muốn phát minh lại bánh xe và bạn muốn trọng lượng nhẹ, điều này tốt hơn câu trả lời đã được chấp nhận. –

+0

+1 cho Meschach. Nó hơi nhanh hơn blitz. – Dilawar

1

Giả sử bạn đang mã hóa cho x86, bạn có thể xem xét Integrated Performance Primitives (IPP) của Intel và Math Kernel Library (MKL). Các thư viện này cung cấp các thư viện siêu nhanh (có thể nhanh hơn bất kỳ ai khác có thể viết, vì chúng được tối ưu hóa cho các chi tiết kiến ​​trúc không công khai) cho nhiều hoạt động phổ biến, bao gồm cả vectơ và ma trận.

+4

Chúng là $ 500 apiece: C – cjcurrie

0

Có rất nhiều tùy chọn tại Mathtools.net. Object-Oriented Numerics cũng liệt kê một số gói có thể hoạt động cho bạn. Kể từ khi tôi không chắc chắn chính xác những gì bạn đang làm (bạn cần rất nhiều đại số tuyến tính tối ưu hóa? Hoặc sẽ hoạt động đơn giản đủ?), Thật khó để cụ thể hơn.

Nói chung, Matrix Template Library là tư tưởng khá tốt. Và nếu bạn cần một số grg đại số tuyến tính nghiêm trọng, bạn nên xem BLASLAPACK.

1

Hãy thử CIMG (cimg.sourceforge.net). Đó là xử lý hình ảnh tập trung, nhưng là miễn phí, rất nhẹ (toàn bộ thư viện bao gồm một tập tin .h duy nhất!), Và có tất cả các hoạt động vector/ma trận chuẩn.

Nó là C++, do đó, nó sẽ không hoạt động nếu bạn đang làm thẳng C, nhưng nó đáng để xem xét

3

Nhiều người đang yêu cầu bạn sử dụng nhiều thư viện BLAS, nhưng điều này có thể sẽ rất chậm cho bạn Hầu hết chúng được tối ưu hóa để chunk ma trận thành các kích cỡ cố định (khoảng 50 phần tử - phụ thuộc vào kích thước bộ nhớ cache) và hoạt động trên các khối với một thuật toán tối ưu hóa, sau đó op erate trên thức ăn thừa với một thuật toán tầm thường. Trên các ma trận nhỏ, điều này làm cho nó thậm chí còn chậm hơn là chỉ gọi thuật toán tầm thường.

FWIW, khi tôi cần làm điều này trong fortran (2x2 và 4x4 ma trận vuông ma trận) Tôi chỉ mã hóa hoàn toàn các phiên bản chưa được kiểm tra và nó hoạt động đủ tốt (khoảng 20x tốc độ xây dựng MATMUL trên gfortran, nhưng một phần của điều này là có lẽ do thực tế là MATMUL không có sẵn và phiên bản của tôi là). Tôi không bao giờ có thể tìm thấy một thư viện tốt để làm điều này cho tôi.

Trong C++ nó sẽ là tốt vì bạn sẽ có thể sử dụng BLITZ nhưng than ôi ...

1

Có lẽ bạn nên thử tính toán lib DirectX (chỉ cần Windows ...). Vectơ, ma trận, hoạt động trên đó, tất cả những gì bạn cần có lẽ là ở đó. Bạn chỉ có thể sử dụng nó chứ không phải toàn bộ DX. Bạn có thể sử dụng phiên bản 9 hoặc 10. Đó là nhanh :)

#include <D3DX9Math.h> 
-1

Bạn cũng có thể muốn có một cái nhìn tại Armadillo C++ library

+2

tại sao bạn nên giới thiệu thư viện C++ khi được yêu cầu cụ thể cho thư viện c? – xaxxon

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