Đó là một nhiệm vụ khá đơn giản, nhưng tôi đã không thể tìm thấy câu trả lời cho nó:Nối cột ma trận, sử dụng Eigen thư viện
Sử dụng thư viện Eigen, giả sử tôi có Matrix2Xd mat
và Vector2d vec
, nơi
mat = 1 1 1
1 1 1
vec = 2 2
Bây giờ tôi cần một cái gì đó giống như mat.addCol(vec)
như rằng sau đó
mat = 1 1 1 2
1 1 1 2
sự (đơn giản nhất) cách tốt nhất để thực hiện điều này là gì?
Xin lưu ý rằng đây không phải là bản sao của How do you make a matrix out of vectors in eigen?. Tôi không muốn khởi tạo cấu trúc ma trận nhưng thêm vào ma trận hiện có. Hoặc là có thể có một thủ thuật, làm thế nào để sử dụng khởi tạo dấu phẩy trong trường hợp này? Các mã sau đây sẽ thất bại:
Matrix2Xd mat(2,3);
Vector2d vec;
mat << 1, 1, 1, 1, 1, 1;
vec << 2, 2;
cout << mat << endl;
mat << vec; // <-- crashes here
cout << mat << endl;
Edit: các công trình sau đây, nhưng tôi không thích sự cần thiết của một biến tạm thời cho một nhiệm vụ cơ bản như vậy. Có cách nào tốt hơn?
Matrix2Xd tmp(2, mat.cols()+1);
tmp << mat, vec;
mat = tmp;
Bạn đã đọc những câu trả lời đầu tiên trong dupe: "Ma trận m mus đã been resized đúng đầu tiên."? Ma trận Eigen có chức năng thành viên ['resize'] (http://eigen.tuxfamily.org/dox/classEigen_1_1PlainObjectBase.html#afbbb33d14fe7fb9683019a39ce1c659d) ... Tài liệu có thể được googled hoặc đọc ít nhất. – rubenvb
@rubenvb 'resize' không giữ nội dung của ma trận. Nếu tôi làm 'mat.resize (2, mat.cols() + 1);', ma trận được lấp đầy với một số giá trị ngẫu nhiên sau đó. – luator
Sau đó, bạn sẽ cần phải tạo một tạm thời hoặc khởi tạo nó với kích thước chính xác. – rubenvb