50 Tensor(
const std::vector<T>& init_vals,
54 :
Tensor(shape, dtype, device) {
56 if (
static_cast<int64_t
>(init_vals.size()) !=
shape_.NumElements()) {
58 "Tensor initialization values' size {} does not match the "
60 init_vals.size(), shape_.NumElements());
65 if (!std::is_pod<T>()) {
66 utility::LogError(
"Object must be a POD.");
72 init_vals.size() * dtype.
ByteSize());
81 :
Tensor(shape, dtype, device) {
98 const std::shared_ptr<Blob>& blob)
115 template <
typename T>
119 shape_ = {static_cast<int64_t>(vec.size())};
125 "Tensor initialization values' size {} does not match the "
127 vec.size(), shape_.NumElements());
130 auto sp_vec = std::make_shared<std::vector<T>>();
132 data_ptr_ =
static_cast<void*
>(sp_vec->data());
138 [sp_vec](
void*) { (void)sp_vec; });
166 : shape_(shape), strides_(strides), data_ptr_(data_ptr), dtype_(dtype) {
167 if (strides_.empty()) {
168 strides_ = shape_util::DefaultStrides(shape);
171 blob_ = std::make_shared<Blob>(device, (
void*)data_ptr_, [](
void*) {});
203 template <
typename T>
218 template <
typename Object>
222 "Assignment with scalar only works for scalar Tensor of "
233 template <
typename S>
236 template <
typename Object>
237 void FillObject(
const Object& v);
251 template <
typename T>
273 template <
typename T>
276 std::vector<T> ele_list{val};
278 return Tensor(ele_list, shape, type, device);
283 template <
typename T>
286 return InitWithInitializerList<T, 1>(in_list, device);
291 template <
typename T>
293 const std::initializer_list<std::initializer_list<T>>& in_list,
295 return InitWithInitializerList<T, 2>(in_list, device);
300 template <
typename T>
302 const std::initializer_list<
303 std::initializer_list<std::initializer_list<T>>>& in_list,
305 return InitWithInitializerList<T, 3>(in_list, device);
363 Tensor GetItem(
const std::vector<TensorKey>& tks)
const;
399 Tensor SetItem(
const std::vector<TensorKey>& tks,
const Tensor& value);
478 Tensor Flatten(int64_t start_dim = 0, int64_t end_dim = -1)
const;
504 void CopyFrom(
const Tensor& other);
516 Tensor To(
const Device& device,
bool copy =
false)
const;
526 std::string ToString(
bool with_suffix =
true,
527 const std::string& indent =
"")
const;
530 Tensor operator[](int64_t i)
const;
534 Tensor IndexExtract(int64_t dim, int64_t idx)
const;
545 int64_t step = 1)
const;
566 Tensor IndexGet(
const std::vector<Tensor>& index_tensors)
const;
575 void IndexSet(
const std::vector<Tensor>& index_tensors,
576 const Tensor& src_tensor);
586 void IndexAdd_(int64_t dim,
const Tensor& index,
const Tensor& src);
603 Tensor Transpose(int64_t dim0, int64_t dim1)
const;
616 template <
typename T>
618 if (
shape_.NumElements() != 1) {
620 "Tensor::Item() only works for Tensor with exactly one "
806 Tensor LogicalNot()
const;
932 std::vector<Tensor> NonZeroNumpy()
const;
949 bool IsNonZero()
const;
954 bool keepdim =
false)
const;
959 bool keepdim =
false)
const;
972 bool AllEqual(
const Tensor& other)
const;
991 bool AllClose(
const Tensor& other,
993 double atol = 1e-8)
const;
1015 double atol = 1e-8)
const;
1020 bool IsSame(
const Tensor& other)
const;
1023 template <
typename T>
1042 Tensor Contiguous()
const;
1063 std::tuple<Tensor, Tensor, Tensor>
LU(
const bool permute_l =
false)
const;
1077 std::tuple<Tensor, Tensor>
LUIpiv()
const;
1112 std::tuple<Tensor, Tensor>
Triul(
const int diagonal = 0)
const;
1120 std::tuple<Tensor, Tensor, Tensor>
SVD()
const;
1142 template <
typename T>
1144 return const_cast<T*
>(
const_cast<const Tensor*
>(
this)->GetDataPtr<
T>());
1147 template <
typename T>
1151 "Requested values have type {} but Tensor has type {}. "
1152 "Please use non templated GetDataPtr() with manual "
1165 Device GetDevice()
const override;
1173 template <
typename T>
1177 "Requested values have type {} but Tensor has type {}",
1180 if (
dtype_.ByteSize() !=
sizeof(
T)) {
1181 utility::LogError(
"Internal error: element size mismatch {} != {}",
1182 dtype_.ByteSize(),
sizeof(
T));
1193 void Save(
const std::string& file_name)
const;
1196 static Tensor Load(
const std::string& file_name);
1222 std::unique_ptr<Impl> impl_;
1249 std::unique_ptr<Impl> impl_;
1285 std::string ScalarPtrToString(
const void* ptr)
const;
1289 template <
typename T,
size_t D>
1290 static Tensor InitWithInitializerList(
1294 std::vector<T> values =
1339 :
Tensor(shape, dtype, device) {
1341 if (
static_cast<int64_t
>(init_vals.size()) !=
shape_.NumElements()) {
1343 "Tensor initialization values' size {} does not match the "
1345 init_vals.size(), shape_.NumElements());
1353 std::vector<uint8_t> init_vals_uchar(init_vals.size());
1354 std::transform(init_vals.begin(), init_vals.end(), init_vals_uchar.begin(),
1355 [](
bool v) -> uint8_t { return static_cast<uint8_t>(v); });
1358 init_vals_uchar.data(),
1359 init_vals_uchar.size() * dtype.
ByteSize());
1373 std::transform(values_uchar.begin(), values_uchar.end(), values.begin(),
1374 [](uint8_t v) ->
bool { return static_cast<bool>(v); });
1380 if (
shape_.NumElements() != 1) {
1382 "Tensor::Item only works for Tensor with one element.");
1388 return static_cast<bool>(value);
1391template <
typename S>
1394 scalar_t casted_v =
static_cast<scalar_t
>(v);
1401template <
typename Object>
1408template <
typename T>
1410 return rhs + scalar_lhs;
1413template <
typename T>
1418template <
typename T>
1420 return rhs * scalar_lhs;
1423template <
typename T>
1430 utility::LogError(
"Not supported for SYCL device.");
The common header of DLPack.
#define DISPATCH_DTYPE_TO_TEMPLATE_WITH_BOOL(DTYPE,...)
Definition Dispatch.h:67
bool IsSYCL() const
Returns true iff device type is SYCL GPU.
Definition Device.h:52
int64_t ByteSize() const
Definition Dtype.h:58
static const Dtype FromType()
Definition Dtype.h:54
static void MemcpyToHost(void *host_ptr, const void *src_ptr, const Device &src_device, size_t num_bytes)
Same as Memcpy, but with host (CPU:0) as default dst_device.
Definition MemoryManager.cpp:85
static void MemcpyFromHost(void *dst_ptr, const Device &dst_device, const void *host_ptr, size_t num_bytes)
Same as Memcpy, but with host (CPU:0) as default src_device.
Definition MemoryManager.cpp:77
Definition SizeVector.h:69
int64_t NumElements() const
Definition SizeVector.cpp:108
void swap(SmallVectorImpl &RHS)
Definition SmallVector.h:1027
LLVM_NODISCARD bool empty() const
Definition SmallVector.h:123
Tensor operator*(Scalar value) const
Definition Tensor.h:659
Tensor Clone() const
Copy Tensor to the same device.
Definition Tensor.h:501
SizeVector strides_
Definition Tensor.h:1310
Tensor Neg() const
Element-wise negation of a tensor, returning a new tensor.
Definition Tensor.cpp:1297
int64_t GetShape(int64_t dim) const
Definition Tensor.h:1130
Tensor operator*=(Scalar value)
Definition Tensor.h:666
static Tensor Init(const std::initializer_list< T > &in_list, const Device &device=Device("CPU:0"))
Definition Tensor.h:284
Tensor operator&&(const Tensor &value) const
Definition Tensor.h:821
Tensor Ge(const Tensor &value) const
Definition Tensor.cpp:1586
ConstIterator cend() const
Definition Tensor.cpp:313
const SizeVector & GetStridesRef() const
Definition Tensor.h:1136
std::shared_ptr< Blob > GetBlob() const
Definition Tensor.h:1167
static Tensor Empty(const SizeVector &shape, Dtype dtype, const Device &device=Device("CPU:0"))
Create a tensor with uninitialized values.
Definition Tensor.cpp:368
Tensor operator||(const Tensor &value) const
Definition Tensor.h:838
Tensor(Tensor &&other)=default
void Fill(S v)
Fill the whole Tensor with a scalar value, the scalar will be casted to the Tensor's Dtype.
Definition Tensor.h:1392
Tensor LogicalAnd(const Tensor &value) const
Definition Tensor.cpp:1421
Tensor(const Tensor &other)=default
Tensor Le(const Tensor &value) const
Definition Tensor.cpp:1618
SizeVector GetShape() const
Definition Tensor.h:1126
int64_t GetLength() const
Definition Tensor.h:1124
Tensor & operator=(const Tensor &other) &
Definition Tensor.cpp:323
Tensor LogicalOr(const Tensor &value) const
Definition Tensor.cpp:1455
Iterator end()
Definition Tensor.cpp:244
T * GetDataPtr()
Definition Tensor.h:1143
std::vector< T > ToFlatVector() const
Retrieve all values as an std::vector, for debugging and testing.
Definition Tensor.h:1024
Tensor operator+=(Scalar value)
Definition Tensor.h:640
Tensor Sub(const Tensor &value) const
Substracts a tensor and returns the resulting tensor.
Definition Tensor.cpp:1101
Tensor(void *data_ptr, Dtype dtype, const SizeVector &shape, const SizeVector &strides={}, const Device &device=Device("CPU:0"))
Tensor wrapper constructor from raw host buffer.
Definition Tensor.h:161
Tensor Add_(const Tensor &value)
Definition Tensor.cpp:1085
const void * GetDataPtr() const
Definition Tensor.h:1161
void * data_ptr_
Definition Tensor.h:1325
std::string ToString(bool with_suffix=true, const std::string &indent="") const
Definition Tensor.cpp:748
Tensor operator*=(const Tensor &value)
Definition Tensor.h:665
Iterator begin()
Definition Tensor.cpp:237
Tensor T() const
Expects input to be <= 2-D Tensor by swapping dimension 0 and 1.
Definition Tensor.cpp:1047
Tensor AsRvalue()
Definition Tensor.h:557
Tensor Div(const Tensor &value) const
Divides a tensor and returns the resulting tensor.
Definition Tensor.cpp:1173
Tensor Lt(const Tensor &value) const
Element-wise less-than of tensors, returning a new boolean tensor.
Definition Tensor.cpp:1554
Tensor Sub_(const Tensor &value)
Definition Tensor.cpp:1121
Tensor operator/(const Tensor &value) const
Definition Tensor.h:671
Tensor Contiguous() const
Definition Tensor.cpp:740
Dtype dtype_
Data type.
Definition Tensor.h:1328
int64_t NumDims() const
Definition Tensor.h:1171
ConstIterator cbegin() const
Definition Tensor.cpp:306
Tensor operator-() const
Unary minus of a tensor, returning a new tensor.
Definition Tensor.h:751
Tensor Gt(const Tensor &value) const
Element-wise greater-than of tensors, returning a new boolean tensor.
Definition Tensor.cpp:1522
Tensor(const SizeVector &shape, Dtype dtype, const Device &device=Device("CPU:0"))
Constructor for creating a contiguous Tensor.
Definition Tensor.h:37
Tensor operator/=(const Tensor &value)
Definition Tensor.h:678
Tensor operator/(Scalar value) const
Definition Tensor.h:672
static Tensor EmptyLike(const Tensor &other)
Definition Tensor.h:246
static Tensor Full(const SizeVector &shape, T fill_value, Dtype dtype, const Device &device=Device("CPU:0"))
Create a tensor fill with specified value.
Definition Tensor.h:252
Tensor & operator=(const T v) &&
Definition Tensor.h:204
const T * GetDataPtr() const
Definition Tensor.h:1148
void FillObject(const Object &v)
Definition Tensor.h:1402
bool IsContiguous() const
Definition Tensor.h:1035
Tensor operator<(const Tensor &value) const
Definition Tensor.h:879
std::shared_ptr< Blob > blob_
Underlying memory buffer for Tensor.
Definition Tensor.h:1331
Tensor operator+=(const Tensor &value)
Definition Tensor.h:639
Tensor operator-=(Scalar value)
Definition Tensor.h:653
Tensor operator+(Scalar value) const
Definition Tensor.h:633
void AssertTemplateDtype() const
Definition Tensor.h:1174
Tensor Add(const Tensor &value) const
Adds a tensor and returns the resulting tensor.
Definition Tensor.cpp:1065
ConstIterator begin() const
Definition Tensor.h:1276
Tensor Div_(const Tensor &value)
Definition Tensor.cpp:1193
SizeVector shape_
SizeVector of the Tensor. shape_[i] is the length of dimension i.
Definition Tensor.h:1301
Tensor(const T *init_vals, const SizeVector &shape, Dtype dtype, const Device &device=Device("CPU:0"))
Constructor from raw host buffer. The memory will be copied.
Definition Tensor.h:77
Tensor()
Definition Tensor.h:34
Device GetDevice() const override
Definition Tensor.cpp:1403
Tensor operator==(const Tensor &value) const
Definition Tensor.h:911
int64_t GetStride(int64_t dim) const
Definition Tensor.h:1138
static Tensor Init(const T val, const Device &device=Device("CPU:0"))
Definition Tensor.h:274
Tensor operator-(Scalar value) const
Definition Tensor.h:646
Tensor Ne(const Tensor &value) const
Element-wise not-equals-to of tensors, returning a new boolean tensor.
Definition Tensor.cpp:1682
Tensor & AssignObject(const Object &v) &&
Definition Tensor.h:219
Tensor operator>=(const Tensor &value) const
Definition Tensor.h:890
T Item() const
Definition Tensor.h:617
Tensor Mul_(const Tensor &value)
Definition Tensor.cpp:1157
Tensor operator/=(Scalar value)
Definition Tensor.h:679
Tensor(const SizeVector &shape, const SizeVector &strides, void *data_ptr, Dtype dtype, const std::shared_ptr< Blob > &blob)
Definition Tensor.h:94
Tensor operator+(const Tensor &value) const
Definition Tensor.h:632
Tensor(const std::vector< T > &init_vals, const SizeVector &shape, Dtype dtype, const Device &device=Device("CPU:0"))
Constructor for creating a contiguous Tensor with initial values.
Definition Tensor.h:50
int64_t NumElements() const
Definition Tensor.h:1169
Tensor operator*(const Tensor &value) const
Definition Tensor.h:658
void * GetDataPtr()
Definition Tensor.h:1159
Tensor operator!=(const Tensor &value) const
Definition Tensor.h:921
Tensor operator-(const Tensor &value) const
Definition Tensor.h:645
Tensor(std::vector< T > &&vec, const SizeVector &shape={})
Take ownership of data in std::vector<T>.
Definition Tensor.h:116
Dtype GetDtype() const
Definition Tensor.h:1163
Tensor Mul(const Tensor &value) const
Multiplies a tensor and returns the resulting tensor.
Definition Tensor.cpp:1137
const SizeVector & GetShapeRef() const
Definition Tensor.h:1128
Tensor operator<=(const Tensor &value) const
Definition Tensor.h:901
ConstIterator end() const
Definition Tensor.h:1282
Tensor operator-=(const Tensor &value)
Definition Tensor.h:652
SizeVector GetStrides() const
Definition Tensor.h:1134
Tensor operator>(const Tensor &value) const
Definition Tensor.h:869
const Tensor AsRvalue() const
Convert to constant rvalue.
Definition Tensor.h:560
static Tensor Init(const std::initializer_list< std::initializer_list< T > > &in_list, const Device &device=Device("CPU:0"))
Definition Tensor.h:292
static Tensor Init(const std::initializer_list< std::initializer_list< std::initializer_list< T > > > &in_list, const Device &device=Device("CPU:0"))
Definition Tensor.h:301
Tensor Eq(const Tensor &value) const
Element-wise equals-to of tensors, returning a new boolean tensor.
Definition Tensor.cpp:1650
Tensor To(Dtype dtype, bool copy=false) const
Definition Tensor.cpp:707
TensorKey is used to represent single index, slice or advanced indexing on a Tensor.
Definition TensorKey.h:26
Definition Optional.h:259
Definition ShapeUtil.cpp:17
int64_t WrapDim(int64_t dim, int64_t max_dim, bool inclusive)
Wrap around negative dim.
Definition ShapeUtil.cpp:131
SizeVector DefaultStrides(const SizeVector &shape)
Compute default strides for a shape when a tensor is contiguous.
Definition ShapeUtil.cpp:214
typename NestedInitializerImpl< T, D >::type NestedInitializerList
Definition TensorInit.h:36
SizeVector InferShape(const L &list)
Definition TensorInit.h:82
std::vector< T > ToFlatVector(const SizeVector &shape, const tensor_init::NestedInitializerList< T, D > &nested_list)
Definition TensorInit.h:107
Definition AdvancedIndexing.cpp:15
Tensor operator+(T scalar_lhs, const Tensor &rhs)
Definition Tensor.h:1409
void Matmul(const Tensor &A, const Tensor &B, Tensor &output)
Computes matrix multiplication C = AB.
Definition Matmul.cpp:17
const Dtype Int64
Definition Dtype.cpp:47
void LU(const Tensor &A, Tensor &permutation, Tensor &lower, Tensor &upper, const bool permute_l)
Definition LU.cpp:126
void Triul(const Tensor &A, Tensor &upper, Tensor &lower, const int diagonal)
Definition Tri.cpp:79
void SVD(const Tensor &A, Tensor &U, Tensor &S, Tensor &VT)
Definition SVD.cpp:17
Tensor operator/(T scalar_lhs, const Tensor &rhs)
Definition Tensor.h:1424
void Inverse(const Tensor &A, Tensor &output)
Computes A^{-1} with LU factorization, where A is a N x N square matrix.
Definition Inverse.cpp:18
const Dtype Undefined
Definition Dtype.cpp:41
Tensor operator-(T scalar_lhs, const Tensor &rhs)
Definition Tensor.h:1414
Tensor operator*(T scalar_lhs, const Tensor &rhs)
Definition Tensor.h:1419
void LUIpiv(const Tensor &A, Tensor &ipiv, Tensor &output)
Definition LU.cpp:62
void Solve(const Tensor &A, const Tensor &B, Tensor &X)
Solve AX = B with LU decomposition. A is a square matrix.
Definition Solve.cpp:22
void Tril(const Tensor &A, Tensor &output, const int diagonal)
Definition Tri.cpp:57
void LeastSquares(const Tensor &A, const Tensor &B, Tensor &X)
Solve AX = B with QR decomposition. A is a full-rank m x n matrix (m >= n).
Definition LeastSquares.cpp:17
Tensor Append(const Tensor &self, const Tensor &other, const utility::optional< int64_t > &axis)
Appends the two tensors, along the given axis into a new tensor. Both the tensors must have same data...
Definition TensorFunction.cpp:118
void Triu(const Tensor &A, Tensor &output, const int diagonal)
Definition Tri.cpp:35
void AssertNotSYCL(const Tensor &tensor)
Definition Tensor.h:1428
double Det(const Tensor &A)
Definition Det.cpp:16
Definition BoundingVolume.cpp:15
constexpr nullopt_t nullopt
Definition Optional.h:152
Definition PinholeCameraIntrinsic.cpp:16
OPEN3D_HOST_DEVICE bool IsClose(const scalar_t &x, const T &y, const double rtol=1e-4)
Definition GeometryMacros.h:44
C Tensor object, manage memory of DLTensor. This data structure is intended to facilitate the borrowi...
Definition DLPack.h:174
Const iterator for Tensor.
Definition Tensor.h:1226
ConstIterator & operator++()
Definition Tensor.cpp:284
ConstIterator(pointer tensor, int64_t index)
Definition Tensor.cpp:259
pointer operator->() const
Definition Tensor.cpp:279
const Tensor value_type
Definition Tensor.h:1229
reference operator*() const
Definition Tensor.cpp:275
value_type reference
Definition Tensor.h:1231
std::forward_iterator_tag iterator_category
Definition Tensor.h:1227
value_type * pointer
Definition Tensor.h:1230
std::ptrdiff_t difference_type
Definition Tensor.h:1228
bool operator!=(const ConstIterator &other) const
Definition Tensor.cpp:301
bool operator==(const ConstIterator &other) const
Definition Tensor.cpp:295
Iterator for Tensor.
Definition Tensor.h:1199
value_type * pointer
Definition Tensor.h:1203
Iterator(pointer tensor, int64_t index)
Definition Tensor.cpp:192
std::ptrdiff_t difference_type
Definition Tensor.h:1201
Iterator & operator++()
Definition Tensor.cpp:217
bool operator==(const Iterator &other) const
Definition Tensor.cpp:228
pointer operator->() const
Definition Tensor.cpp:212
std::forward_iterator_tag iterator_category
Definition Tensor.h:1200
bool operator!=(const Iterator &other) const
Definition Tensor.cpp:233
value_type reference
Definition Tensor.h:1204
reference operator*() const
Definition Tensor.cpp:208
Tensor value_type
Definition Tensor.h:1202