2013-05-14 45 views
18

Có thư viện nào cho phép nhân ma trận trong Go không?Thư viện ma trận Go

Tôi muốn viết và triển khai một số thuật toán ML nhanh và có thể mở rộng trên một số nút máy chủ, nhưng tôi sợ rằng tốc độ và sức mạnh tôi sẽ nhận được với Go sẽ vượt quá sự trưởng thành của Matlab hoặc thậm chí triển khai gọn gàng trong các ngôn ngữ "chậm" sẽ nhanh hơn nhiều.

Tôi không muốn đối phó với C/C++, mặc dù họ là vị vua hiệu suất.

Nhân ma trận nhanh và các thao tác khác chỉ đơn giản là cần thiết cho nhiệm vụ này, và nếu Go không đủ trưởng thành để có một ... thì tôi sẽ cần quyết định xem tôi có bắt đầu nó hay không hoặc chỉ cần sử dụng một công cụ khác.

nhờ

+1

Thực ra Matlab là vua hoạt động ma trận.(Thường thực hiện tương tự trong các nhiệm vụ này với C++ và đôi khi cực kỳ tốt hơn) –

+5

@DennisJaheruddin Tất nhiên nguyên nhân gốc là LAPACK và BLAS được tối ưu hóa cao. Bất cứ điều gì liên quan đến các thư viện như vậy (Numpy, Matlab ...) sẽ nhanh hơn nhiều so với các mã khác, được biên dịch hay không. Nếu OP chủ yếu là đại số tuyến tính thì thật khó để làm lại nhiều năm nỗ lực và điều chỉnh cẩn thận bởi các nhà khoa học, nhà cung cấp phần cứng ... – jorgeca

+0

@jorgeca hoàn toàn có! Tôi nên có chỉ hỏi nếu có một wrapper đi mà đã sử dụng LAPACK. có lẽ bạn biết một? – lollercoaster

Trả lời

6

Nếu bạn muốn có một giải pháp tự nhiên, bạn có thể muốn sử dụng skelterjohn/go.matrix. Theo sự hiểu biết tốt nhất của tôi, đây là việc thực hiện ma trận tiên tiến nhất trong việc đi thuần túy.

Tính năng này, trong số những thứ khác, parallel matrix multiplication như được thảo luận here.

Hãy nhớ rằng có thể giao diện thư viện C/C++ bằng cách sử dụng cgo. Vì vậy, nếu bạn có một thư viện trong tâm trí nhưng không muốn viết C/C++, bạn có thể viết một số wrapper cho các phương pháp bạn cần và viết phần còn lại trong đi. Điều này đã được thực hiện, ví dụ, cho BLAS/LAPACK.

Cập nhật: Như @Malcom đã chỉ ra, việc phát triển trình bao bọc cgo đã đề cập có vẻ như bị ngừng hoạt động. Hãy xem biogo.

+0

tuyệt vời cho chỉ ra https://github.com/hrautila/linalg! – lollercoaster

+3

May mắn thay @ lollercoaster nó có vẻ như phát triển trên hrautila/linalg đã bị đình trệ. Không có chỉnh sửa nào được thực hiện trong nửa năm qua. Tin tốt là biogo.matrix là một thư viện ma trận được BLAS hỗ trợ. Một điều mà biogo.blas có hơn inalg là đầy đủ BLAS thực hiện lên đến và bao gồm cả cấp 3. – Malcolm

+2

Tôi tin rằng lớp ma trận biogo bây giờ đã được tách ra thành một gói riêng biệt. code: github.com/gonum/matrix docs: godoc.org/github.com/gonum/matrix. – jochen

5

Có một gói ma trận rất tốt ngoài nhóm biogo. Tôi đã xem gomat tại go.matrix, và tính đến tháng 10 năm 2013, tôi kết luận rằng biogo trưởng thành hơn. Bioga của pacakage ma trận được hỗ trợ bởi BLAS. Biogo sử dụng cgo để liên kết với mã C liên kết với thư viện FORTRAN BLAS. Tôi nghĩ rằng chỉ có Linux được hỗ trợ.

bộ gom không đầy đủ và hoạt động phát triển đã bị ngừng hoạt động. Lần chỉnh sửa cuối cùng để gomat đã hơn một năm trước. Ngoài ra, gomat là hư không gần như hoàn thành như go.matrix hoặc biogo.matrix.

go.matrix là một gói tốt. Nó là một thực hiện thư viện ma trận go tinh khiết, trưởng thành. Nó thậm chí còn có hỗ trợ cho các hoạt động ma trận song song. Tuy nhiên, biogo.matrix có thêm lợi ích khi sử dụng BLAS. BLAS đã được thử nghiệm trong nhiều thập kỷ; Tôi tin tưởng đó là độ tin cậy và hiệu suất (mặc dù không có điểm chuẩn trong hai triển khai).

Đây là tài liệu về biogo:

http://godoc.org/code.google.com/p/biogo

Cụ thể, các gói ma trận có liên quan bao gồm:

http://godoc.org/code.google.com/p/biogo.matrix

http://godoc.org/code.google.com/p/biogo.blas

Cài đặt với:

go get code.google.com/p/biogo/ 
+0

Có lẽ nó sẽ là một ý tưởng tốt khi một cộng đồng đi xung quanh biogo.matrix? Tôi đã không điều tra nó, nhưng có lẽ giao diện của biogo.matrix có thể được sử dụng hoán đổi cho nhau với các giao diện ma trận từ go.matrix ... – Malcolm

+1

Tôi tin rằng lớp ma trận biogo hiện đã được tách ra thành một gói riêng biệt. mã: https://github.com/gonum/matrix tài liệu: https://godoc.org/github.com/gonum/matrix. – jochen

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