def to_numpy(self, keep_dims=False, as_vector=None, dtype=None): """Converts `self` to a numpy array. Args: keep_dims (bool, optional): Whether to keep the dimension after conversion. When keep_dims=True, on an n-D matrix field, the numpy array always has n+2 dims, even for 1x1, 1xn, nx1 matrix fields. When keep_dims=False, the resulting numpy array should skip the matrix dims with size 1. For example, a 4x1 or 1x4 matrix field with 5x6x7 elements results in an array of shape 5x6x7x4. as_vector (bool, deprecated): Whether to make the returned numpy array as a vector, i.e., with shape (n,) rather than (n, 1). Note that this argument has been deprecated. More discussion about `as_vector`: https://github.com/taichi-dev/taichi/pull/1046#issuecomment-633548858. dtype (DataType, optional): The desired data type of returned numpy array. Returns: numpy.ndarray: The result numpy array. """ if as_vector is not None: warning( 'v.to_numpy(as_vector=True) is deprecated, ' 'please use v.to_numpy() directly instead', DeprecationWarning, stacklevel=3) if dtype is None: dtype = to_numpy_type(self.dtype) as_vector = self.m == 1 and not keep_dims shape_ext = (self.n, ) if as_vector else (self.n, self.m) import numpy as np arr = np.zeros(self.shape + shape_ext, dtype=dtype) from taichi.lang.meta import matrix_to_ext_arr matrix_to_ext_arr(self, arr, as_vector) ti.sync() return arr
def to_torch(self, device=None, keep_dims=False): import torch as_vector = self.m == 1 and not keep_dims shape_ext = (self.n, ) if as_vector else (self.n, self.m) ret = torch.empty(self.shape + shape_ext, dtype=to_pytorch_type(self.dtype), device=device) from taichi.lang.meta import matrix_to_ext_arr matrix_to_ext_arr(self, ret, as_vector) ti.sync() return ret
def to_numpy(self, keep_dims=False, as_vector=None, dtype=None): # Discussion: https://github.com/taichi-dev/taichi/pull/1046#issuecomment-633548858 if as_vector is not None: warning( 'v.to_numpy(as_vector=True) is deprecated, ' 'please use v.to_numpy() directly instead', DeprecationWarning, stacklevel=3) as_vector = self.m == 1 and not keep_dims shape_ext = (self.n, ) if as_vector else (self.n, self.m) if not self.is_global(): return np.array(self.entries).reshape(shape_ext) if dtype is None: dtype = to_numpy_type(self.dtype) ret = np.zeros(self.shape + shape_ext, dtype=dtype) from taichi.lang.meta import matrix_to_ext_arr matrix_to_ext_arr(self, ret, as_vector) return ret
def to_torch(self, device=None, keep_dims=False): """Converts `self` to a torch tensor. Args: device (torch.device, optional): The desired device of returned tensor. keep_dims (bool, optional): Whether to keep the dimension after conversion. See :meth:`~taichi.lang.field.MatrixField.to_numpy` for more detailed explanation. Returns: torch.tensor: The result torch tensor. """ import torch as_vector = self.m == 1 and not keep_dims shape_ext = (self.n, ) if as_vector else (self.n, self.m) arr = torch.empty(self.shape + shape_ext, dtype=to_pytorch_type(self.dtype), device=device) from taichi.lang.meta import matrix_to_ext_arr matrix_to_ext_arr(self, arr, as_vector) ti.sync() return arr
def to_numpy(self, keep_dims=False, as_vector=None, dtype=None): """Convert the taichi matrix to a numpy.ndarray. Args: keep_dims (bool, optional): Whether keep the dimension after conversion. When keep_dims=True, on an n-D matrix field, the numpy array always has n+2 dims, even for 1x1, 1xn, nx1 matrix fields. When keep_dims=False, the resulting numpy array should skip the dimensionality with only 1 element, on the matrix shape dimensionalities. For example, a 4x1 or 1x4 matrix field with 5x6x7 elements results in an array of shape 5x6x7x4. as_vector (bool, deprecated): Make the returned numpy array as a vector i.e., has a shape (n,) rather than (n, 1) Note that this argument has been deprecated. More discussion about `as_vector`: https://github.com/taichi-dev/taichi/pull/1046#issuecomment-633548858. dtype (DataType, optional): The desired data type of returned numpy array. Returns: numpy.ndarray: The numpy array that converted from the matrix field. """ # Discussion: https://github.com/taichi-dev/taichi/pull/1046#issuecomment-633548858 if as_vector is not None: warning( 'v.to_numpy(as_vector=True) is deprecated, ' 'please use v.to_numpy() directly instead', DeprecationWarning, stacklevel=3) as_vector = self.m == 1 and not keep_dims shape_ext = (self.n, ) if as_vector else (self.n, self.m) if not self.is_global(): return np.array(self.entries).reshape(shape_ext) if dtype is None: dtype = to_numpy_type(self.dtype) ret = np.zeros(self.shape + shape_ext, dtype=dtype) from taichi.lang.meta import matrix_to_ext_arr matrix_to_ext_arr(self, ret, as_vector) return ret