6 #ifndef XGBOOST_LINALG_H_
7 #define XGBOOST_LINALG_H_
30 template <
typename Vec>
static auto InferValues(Vec *vec, int32_t device) {
43 std::array<size_t, 2> shape, int32_t device)
44 : device_{device}, values_{InferValues(vec, device)} {
45 std::copy(strides.cbegin(), strides.cend(), strides_);
46 std::copy(shape.cbegin(), shape.cend(), shape_);
49 std::array<size_t, 2> strides, std::array<size_t, 2> shape,
51 : device_{device}, values_{InferValues(vec, device)} {
52 std::copy(strides.cbegin(), strides.cend(), strides_);
53 std::copy(shape.cbegin(), shape.cend(), shape_);
58 : device_{device}, values_{InferValues(vec, device)} {
59 std::copy(shape.cbegin(), shape.cend(), shape_);
60 strides_[0] = shape[1];
63 MatrixView(std::vector<T> *vec, std::array<size_t, 2> shape)
65 CHECK_EQ(vec->size(), shape[0] * shape[1]);
66 std::copy(shape.cbegin(), shape.cend(), shape_);
67 strides_[0] = shape[1];
71 std::array<size_t, 2> shape, int32_t device)
72 : device_{device}, values_{InferValues(vec, device)} {
73 std::copy(shape.cbegin(), shape.cend(), shape_);
74 strides_[0] = shape[1];
79 return values_[strides_[0] * r + strides_[1] * c];
82 return values_[strides_[0] * r + strides_[1] * c];
86 auto Shape()
const {
return shape_; }
87 auto Values()
const {
return values_; }
88 auto Size()
const {
return shape_[0] * shape_[1]; }
99 : matrix_{std::move(matrix)}, column_{column} {}
102 return matrix_(i, column_);
106 return matrix_(i, column_);
113 #endif // XGBOOST_LINALG_H_