2009-04-21 32 views
7

Tôi muốn thực hiện các chức năng khôn ngoan của yếu tố trên các loại ma trận và vectơ tăng cường, ví dụ: lấy logarit của mỗi phần tử, lũy thừa mỗi phần tử, áp dụng các chức năng đặc biệt, chẳng hạn như gamma và digamma, vv (tương tự như điều trị matlab của các hàm này được áp dụng cho ma trận và vec-tơ.)hoạt động yếu tố khôn ngoan với các loại véc tơ và vector vectơ boost C++ ublas

tôi giả sử viết hàm trợ giúp -forced này cho mỗi chức năng mong muốn sẽ đủ, nhưng điều này có vẻ lãng phí.

tương tự, wiki tăng cường cung cấp một số mã cho vectorize standard functions, nhưng điều này có vẻ khá phức tạp.

valarray đã được đề xuất, nhưng tôi muốn tránh chuyển đổi giữa các kiểu dữ liệu, như tôi cần ublas kiểu dữ liệu cho các hoạt động khác (các sản phẩm ma trận, ma trận thưa thớt, vv)

bất kỳ sự giúp đỡ được đánh giá cao .

Trả lời

9

Sử dụng begin1()/end1() sẽ không hoạt động vì nó cung cấp quyền truy cập vào phần tử ở vị trí cột mặc định (0): do đó, bạn chỉ truy cập tất cả các phần tử trong cột đầu tiên. Tốt hơn (theo nghĩa là bạn nhận được hành vi mong đợi) để có quyền truy cập tuần tự qua:

std::transform(mat.data().begin(), mat.data().end(), 
       mat.data().begin(), boost::math::tgamma) ; 

Tôi nghi ngờ đây có thể là trường hợp triển khai chưa hoàn chỉnh.

Tận hưởng!

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