def to_numpy(self): """Collects the block matrix into a `NumPy ndarray <https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html>`__. Examples -------- >>> from hail.linalg import BlockMatrix >>> bm = BlockMatrix.random(10, 20) >>> a = bm.to_numpy() Notes ----- The number of entries must be less than :math:`2^{31}`. The resulting ndarray will have the same shape as the block matrix. Returns ------- :class:`numpy.ndarray` """ path = new_local_temp_file() uri = local_path_uri(path) self.tofile(uri) return np.fromfile(path).reshape((self.n_rows, self.n_cols))
def _jarray_from_ndarray(nd): if nd.size >= (1 << 31): raise ValueError(f'size of ndarray must be less than 2^31, found {nd.size}') nd = _ndarray_as_float64(nd) path = new_local_temp_file() uri = local_path_uri(path) nd.tofile(path) return Env.hail().utils.richUtils.RichArray.importFromDoubles(Env.hc()._jhc, uri, nd.size)
def from_numpy(cls, ndarray, block_size=None): """Distributes a `NumPy ndarray <https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.html>`__ as a block matrix. Examples -------- >>> import numpy as np >>> a = np.random.rand(10, 20) >>> bm = BlockMatrix.from_numpy(a) Notes ----- The ndarray must have two dimensions, each of non-zero size. The number of entries must be less than :math:`2^{31}`. Parameters ---------- ndarray: :class:`numpy.ndarray` ndarray with two dimensions, each of non-zero size. block_size: :obj:`int`, optional Block size. Default given by :meth:`default_block_size`. Returns ------- :class:`.BlockMatrix` """ if not block_size: block_size = BlockMatrix.default_block_size() if any(i == 0 for i in ndarray.shape): raise ValueError( f'from_numpy: ndarray dimensions must be non-zero, found shape {ndarray.shape}' ) nd = _ndarray_as_2d(ndarray) nd = _ndarray_as_float64(nd) n_rows, n_cols = nd.shape path = new_local_temp_file() uri = local_path_uri(path) nd.tofile(path) return cls.fromfile(uri, n_rows, n_cols, block_size)
def _ndarray_from_jarray(ja): path = new_local_temp_file() uri = local_path_uri(path) Env.hail().utils.richUtils.RichArray.exportToDoubles(Env.hc()._jhc, uri, ja) return np.fromfile(path)