123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- import warnings
- # 2018-05-29, PendingDeprecationWarning added to matrix.__new__
- # 2020-01-23, numpy 1.19.0 PendingDeprecatonWarning
- warnings.warn("Importing from numpy.matlib is deprecated since 1.19.0. "
- "The matrix subclass is not the recommended way to represent "
- "matrices or deal with linear algebra (see "
- "https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html). "
- "Please adjust your code to use regular ndarray. ",
- PendingDeprecationWarning, stacklevel=2)
- import numpy as np
- from numpy.matrixlib.defmatrix import matrix, asmatrix
- # Matlib.py contains all functions in the numpy namespace with a few
- # replacements. See doc/source/reference/routines.matlib.rst for details.
- # Need * as we're copying the numpy namespace.
- from numpy import * # noqa: F403
- __version__ = np.__version__
- __all__ = np.__all__[:] # copy numpy namespace
- __all__ += ['rand', 'randn', 'repmat']
- def empty(shape, dtype=None, order='C'):
- """Return a new matrix of given shape and type, without initializing entries.
- Parameters
- ----------
- shape : int or tuple of int
- Shape of the empty matrix.
- dtype : data-type, optional
- Desired output data-type.
- order : {'C', 'F'}, optional
- Whether to store multi-dimensional data in row-major
- (C-style) or column-major (Fortran-style) order in
- memory.
- See Also
- --------
- empty_like, zeros
- Notes
- -----
- `empty`, unlike `zeros`, does not set the matrix values to zero,
- and may therefore be marginally faster. On the other hand, it requires
- the user to manually set all the values in the array, and should be
- used with caution.
- Examples
- --------
- >>> import numpy.matlib
- >>> np.matlib.empty((2, 2)) # filled with random data
- matrix([[ 6.76425276e-320, 9.79033856e-307], # random
- [ 7.39337286e-309, 3.22135945e-309]])
- >>> np.matlib.empty((2, 2), dtype=int)
- matrix([[ 6600475, 0], # random
- [ 6586976, 22740995]])
- """
- return ndarray.__new__(matrix, shape, dtype, order=order)
- def ones(shape, dtype=None, order='C'):
- """
- Matrix of ones.
- Return a matrix of given shape and type, filled with ones.
- Parameters
- ----------
- shape : {sequence of ints, int}
- Shape of the matrix
- dtype : data-type, optional
- The desired data-type for the matrix, default is np.float64.
- order : {'C', 'F'}, optional
- Whether to store matrix in C- or Fortran-contiguous order,
- default is 'C'.
- Returns
- -------
- out : matrix
- Matrix of ones of given shape, dtype, and order.
- See Also
- --------
- ones : Array of ones.
- matlib.zeros : Zero matrix.
- Notes
- -----
- If `shape` has length one i.e. ``(N,)``, or is a scalar ``N``,
- `out` becomes a single row matrix of shape ``(1,N)``.
- Examples
- --------
- >>> np.matlib.ones((2,3))
- matrix([[1., 1., 1.],
- [1., 1., 1.]])
- >>> np.matlib.ones(2)
- matrix([[1., 1.]])
- """
- a = ndarray.__new__(matrix, shape, dtype, order=order)
- a.fill(1)
- return a
- def zeros(shape, dtype=None, order='C'):
- """
- Return a matrix of given shape and type, filled with zeros.
- Parameters
- ----------
- shape : int or sequence of ints
- Shape of the matrix
- dtype : data-type, optional
- The desired data-type for the matrix, default is float.
- order : {'C', 'F'}, optional
- Whether to store the result in C- or Fortran-contiguous order,
- default is 'C'.
- Returns
- -------
- out : matrix
- Zero matrix of given shape, dtype, and order.
- See Also
- --------
- numpy.zeros : Equivalent array function.
- matlib.ones : Return a matrix of ones.
- Notes
- -----
- If `shape` has length one i.e. ``(N,)``, or is a scalar ``N``,
- `out` becomes a single row matrix of shape ``(1,N)``.
- Examples
- --------
- >>> import numpy.matlib
- >>> np.matlib.zeros((2, 3))
- matrix([[0., 0., 0.],
- [0., 0., 0.]])
- >>> np.matlib.zeros(2)
- matrix([[0., 0.]])
- """
- a = ndarray.__new__(matrix, shape, dtype, order=order)
- a.fill(0)
- return a
- def identity(n,dtype=None):
- """
- Returns the square identity matrix of given size.
- Parameters
- ----------
- n : int
- Size of the returned identity matrix.
- dtype : data-type, optional
- Data-type of the output. Defaults to ``float``.
- Returns
- -------
- out : matrix
- `n` x `n` matrix with its main diagonal set to one,
- and all other elements zero.
- See Also
- --------
- numpy.identity : Equivalent array function.
- matlib.eye : More general matrix identity function.
- Examples
- --------
- >>> import numpy.matlib
- >>> np.matlib.identity(3, dtype=int)
- matrix([[1, 0, 0],
- [0, 1, 0],
- [0, 0, 1]])
- """
- a = array([1]+n*[0], dtype=dtype)
- b = empty((n, n), dtype=dtype)
- b.flat = a
- return b
- def eye(n,M=None, k=0, dtype=float, order='C'):
- """
- Return a matrix with ones on the diagonal and zeros elsewhere.
- Parameters
- ----------
- n : int
- Number of rows in the output.
- M : int, optional
- Number of columns in the output, defaults to `n`.
- k : int, optional
- Index of the diagonal: 0 refers to the main diagonal,
- a positive value refers to an upper diagonal,
- and a negative value to a lower diagonal.
- dtype : dtype, optional
- Data-type of the returned matrix.
- order : {'C', 'F'}, optional
- Whether the output should be stored in row-major (C-style) or
- column-major (Fortran-style) order in memory.
- .. versionadded:: 1.14.0
- Returns
- -------
- I : matrix
- A `n` x `M` matrix where all elements are equal to zero,
- except for the `k`-th diagonal, whose values are equal to one.
- See Also
- --------
- numpy.eye : Equivalent array function.
- identity : Square identity matrix.
- Examples
- --------
- >>> import numpy.matlib
- >>> np.matlib.eye(3, k=1, dtype=float)
- matrix([[0., 1., 0.],
- [0., 0., 1.],
- [0., 0., 0.]])
- """
- return asmatrix(np.eye(n, M=M, k=k, dtype=dtype, order=order))
- def rand(*args):
- """
- Return a matrix of random values with given shape.
- Create a matrix of the given shape and propagate it with
- random samples from a uniform distribution over ``[0, 1)``.
- Parameters
- ----------
- \\*args : Arguments
- Shape of the output.
- If given as N integers, each integer specifies the size of one
- dimension.
- If given as a tuple, this tuple gives the complete shape.
- Returns
- -------
- out : ndarray
- The matrix of random values with shape given by `\\*args`.
- See Also
- --------
- randn, numpy.random.RandomState.rand
- Examples
- --------
- >>> np.random.seed(123)
- >>> import numpy.matlib
- >>> np.matlib.rand(2, 3)
- matrix([[0.69646919, 0.28613933, 0.22685145],
- [0.55131477, 0.71946897, 0.42310646]])
- >>> np.matlib.rand((2, 3))
- matrix([[0.9807642 , 0.68482974, 0.4809319 ],
- [0.39211752, 0.34317802, 0.72904971]])
- If the first argument is a tuple, other arguments are ignored:
- >>> np.matlib.rand((2, 3), 4)
- matrix([[0.43857224, 0.0596779 , 0.39804426],
- [0.73799541, 0.18249173, 0.17545176]])
- """
- if isinstance(args[0], tuple):
- args = args[0]
- return asmatrix(np.random.rand(*args))
- def randn(*args):
- """
- Return a random matrix with data from the "standard normal" distribution.
- `randn` generates a matrix filled with random floats sampled from a
- univariate "normal" (Gaussian) distribution of mean 0 and variance 1.
- Parameters
- ----------
- \\*args : Arguments
- Shape of the output.
- If given as N integers, each integer specifies the size of one
- dimension. If given as a tuple, this tuple gives the complete shape.
- Returns
- -------
- Z : matrix of floats
- A matrix of floating-point samples drawn from the standard normal
- distribution.
- See Also
- --------
- rand, numpy.random.RandomState.randn
- Notes
- -----
- For random samples from the normal distribution with mean ``mu`` and
- standard deviation ``sigma``, use::
- sigma * np.matlib.randn(...) + mu
- Examples
- --------
- >>> np.random.seed(123)
- >>> import numpy.matlib
- >>> np.matlib.randn(1)
- matrix([[-1.0856306]])
- >>> np.matlib.randn(1, 2, 3)
- matrix([[ 0.99734545, 0.2829785 , -1.50629471],
- [-0.57860025, 1.65143654, -2.42667924]])
- Two-by-four matrix of samples from the normal distribution with
- mean 3 and standard deviation 2.5:
- >>> 2.5 * np.matlib.randn((2, 4)) + 3
- matrix([[1.92771843, 6.16484065, 0.83314899, 1.30278462],
- [2.76322758, 6.72847407, 1.40274501, 1.8900451 ]])
- """
- if isinstance(args[0], tuple):
- args = args[0]
- return asmatrix(np.random.randn(*args))
- def repmat(a, m, n):
- """
- Repeat a 0-D to 2-D array or matrix MxN times.
- Parameters
- ----------
- a : array_like
- The array or matrix to be repeated.
- m, n : int
- The number of times `a` is repeated along the first and second axes.
- Returns
- -------
- out : ndarray
- The result of repeating `a`.
- Examples
- --------
- >>> import numpy.matlib
- >>> a0 = np.array(1)
- >>> np.matlib.repmat(a0, 2, 3)
- array([[1, 1, 1],
- [1, 1, 1]])
- >>> a1 = np.arange(4)
- >>> np.matlib.repmat(a1, 2, 2)
- array([[0, 1, 2, 3, 0, 1, 2, 3],
- [0, 1, 2, 3, 0, 1, 2, 3]])
- >>> a2 = np.asmatrix(np.arange(6).reshape(2, 3))
- >>> np.matlib.repmat(a2, 2, 3)
- matrix([[0, 1, 2, 0, 1, 2, 0, 1, 2],
- [3, 4, 5, 3, 4, 5, 3, 4, 5],
- [0, 1, 2, 0, 1, 2, 0, 1, 2],
- [3, 4, 5, 3, 4, 5, 3, 4, 5]])
- """
- a = asanyarray(a)
- ndim = a.ndim
- if ndim == 0:
- origrows, origcols = (1, 1)
- elif ndim == 1:
- origrows, origcols = (1, a.shape[0])
- else:
- origrows, origcols = a.shape
- rows = origrows * m
- cols = origcols * n
- c = a.reshape(1, a.size).repeat(m, 0).reshape(rows, origcols).repeat(n, 0)
- return c.reshape(rows, cols)
|