2011-07-18 27 views
13

Tôi đang tìm thư viện Ma trận Sparse mà tôi có thể sử dụng từ Ruby. Tôi hiện đang sử dụng GNU Scientific Library bindings được cung cấp bởi đá quý "gsl", nhưng ứng dụng của tôi sẽ được tối ưu hóa tốt hơn nếu tôi sử dụng thư viện ma trận thưa thớt chuyên dụng. Tôi đã điều tra các thư viện linalgNArray. Không có thư viện nào trong ba thư viện này hỗ trợ lưu trữ hoặc hoạt động được tối ưu hóa bằng ma trận thưa thớt.Thư viện ma trận thưa thớt cho Ruby

Có bất kỳ thứ gì ở đó tôi đã bỏ lỡ - hoặc một thư viện C hiện có có thể viết các ràng buộc không? Tôi thích cái cũ hơn cho cái thứ hai, vì tôi đã không viết C bindings trong Ruby trước đây, nhưng tôi sẽ sẵn sàng thử nó.

Trả lời

3

Giống như Bill đã đề cập ở trên, cách giải thích thuần khiết của Ruby sẽ chậm hơn bạn muốn, nhưng có thể tốt cho việc tạo mẫu. Tôi đã làm việc trên một thư viện như vậy tại số https://github.com/hmcfletch/sparse-matrix

Tôi chưa phát hành nó như một viên ngọc và có nhiều việc phải làm trên đó, nhưng hãy xem liệu bạn có nhu cầu hay không.

+0

Tuyệt vời, cảm ơn bạn.Tôi đã xem qua thư viện của bạn trước đây, nhưng có vẻ như bạn đã thực hiện một số thay đổi đáng kể. Nhiều đánh giá cao! –

+0

@HMCFletch, có quan tâm đến việc sáp nhập vào SciRuby không? Chúng tôi đang làm việc trên một narray viết lại, và tôi đã chỉ là về để bắt đầu mã hóa một ma trận thưa thớt. –

1
+0

Cảm ơn bạn đã trả lời! Vâng tôi có. Nó rất mạnh mẽ, nhưng đối với thư viện này tôi muốn một cái gì đó gần gũi hơn với Ruby. –

+0

từ liên kết thứ hai đó: RSRuby là một cổng của RPy (mô-đun Python tương đương) và nhúng một trình thông dịch R đầy đủ vào Ruby. Điều này có nghĩa là * nên * là có thể truy cập bất kỳ hàm R/biến nào thông qua Ruby. Đó là có sẵn dưới dạng đá quý hoặc nguồn từ Rubyforge: http://rubyforge.org/projects/rsruby/ – francpaul

+0

Xin lỗi, không có nghĩa là tôi rất quen thuộc với R và các ràng buộc Ruby, nó không phù hợp với điều này dự án (Tôi muốn một cái gì đó tôi có thể phân phối như một viên ngọc mà không yêu cầu toàn bộ thời gian chạy R được cài đặt). Cảm ơn cho bình luận mặc dù - nó chắc chắn là một cách tiếp cận tôi muốn giới thiệu cho những người làm việc trên các ứng dụng độc lập hoặc các vấn đề. –

2

giải pháp ruby ​​tinh khiết sẽ được ridiculously chậm. Tôi sẽ bị cám dỗ để nhận một cái gì đó giống như MTJ (http://code.google.com/p/matrix-toolkits-java/) và sử dụng nó dưới JRuby.

Có một loạt mã java ngoài đó; phần lớn nó khá trưởng thành, mặc dù tôi không biết đủ không gian để giới thiệu một thư viện cụ thể. Tôi có thể nói với bạn rằng tôi đã sử dụng java từ jruby thường xuyên và đó là một niềm vui để làm việc với.

+0

Điều này có vẻ phù hợp, cảm ơn bạn. Tôi vẫn muốn được quan tâm đến một cái gì đó bằng cách sử dụng FFI bindings để nó làm việc với các phiên bản ruby ​​khác nhau, nhưng điều này trông giống như một cách tiếp cận tốt. Tôi sẽ xem thư viện và xem tôi có thể làm việc với JRuby không. –

2

Bạn đã xem SciRuby chưa?

Hiện tại chúng tôi chưa có ma trận thưa thớt, nhưng chúng tôi đang làm việc trên đó. Chúng tôi cũng đang trong quá trình viết lại NArray, với sự gia trì của Masahiro Tanaka.

Một mục tiêu là có mọi thứ hoạt động trong Ruby thuần túy, trong C (thông qua các ràng buộc GSL, thông thường) và trong Java cho JRuby. (Pure Ruby sau đó sẽ là dự phòng nếu GSL, vv, không có sẵn.)

Lưu ý phụ: Đây là một câu trả lời khủng khiếp cho câu hỏi này. Tôi đăng nó ở đây chủ yếu để bất cứ ai khác tình cờ làm việc trên những thứ như vậy biết nơi để tìm chúng tôi. =)

+0

Chà, không, tôi không có - đã có một dự án ruby ​​khoa học từ lâu rồi, nhưng tôi không nhận ra nó vẫn còn hoạt động. Cảm ơn! –

+1

Bạn đã cập nhật thông tin này chưa? Alpha đầu tiên của NMatrix đã hết. 'gem install nmatrix'. Đó là một phần của SciRuby và nó có danh sách hỗ trợ thưa thớt danh sách và yale. –