1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114 |
- __all__ = ['matrix', 'bmat', 'mat', 'asmatrix']
- import sys
- import warnings
- import ast
- from .._utils import set_module
- import numpy.core.numeric as N
- from numpy.core.numeric import concatenate, isscalar
- # While not in __all__, matrix_power used to be defined here, so we import
- # it for backward compatibility.
- from numpy.linalg import matrix_power
- def _convert_from_string(data):
- for char in '[]':
- data = data.replace(char, '')
- rows = data.split(';')
- newdata = []
- count = 0
- for row in rows:
- trow = row.split(',')
- newrow = []
- for col in trow:
- temp = col.split()
- newrow.extend(map(ast.literal_eval, temp))
- if count == 0:
- Ncols = len(newrow)
- elif len(newrow) != Ncols:
- raise ValueError("Rows not the same size.")
- count += 1
- newdata.append(newrow)
- return newdata
- @set_module('numpy')
- def asmatrix(data, dtype=None):
- """
- Interpret the input as a matrix.
- Unlike `matrix`, `asmatrix` does not make a copy if the input is already
- a matrix or an ndarray. Equivalent to ``matrix(data, copy=False)``.
- Parameters
- ----------
- data : array_like
- Input data.
- dtype : data-type
- Data-type of the output matrix.
- Returns
- -------
- mat : matrix
- `data` interpreted as a matrix.
- Examples
- --------
- >>> x = np.array([[1, 2], [3, 4]])
- >>> m = np.asmatrix(x)
- >>> x[0,0] = 5
- >>> m
- matrix([[5, 2],
- [3, 4]])
- """
- return matrix(data, dtype=dtype, copy=False)
- @set_module('numpy')
- class matrix(N.ndarray):
- """
- matrix(data, dtype=None, copy=True)
- .. note:: It is no longer recommended to use this class, even for linear
- algebra. Instead use regular arrays. The class may be removed
- in the future.
- Returns a matrix from an array-like object, or from a string of data.
- A matrix is a specialized 2-D array that retains its 2-D nature
- through operations. It has certain special operators, such as ``*``
- (matrix multiplication) and ``**`` (matrix power).
- Parameters
- ----------
- data : array_like or string
- If `data` is a string, it is interpreted as a matrix with commas
- or spaces separating columns, and semicolons separating rows.
- dtype : data-type
- Data-type of the output matrix.
- copy : bool
- If `data` is already an `ndarray`, then this flag determines
- whether the data is copied (the default), or whether a view is
- constructed.
- See Also
- --------
- array
- Examples
- --------
- >>> a = np.matrix('1 2; 3 4')
- >>> a
- matrix([[1, 2],
- [3, 4]])
- >>> np.matrix([[1, 2], [3, 4]])
- matrix([[1, 2],
- [3, 4]])
- """
- __array_priority__ = 10.0
- def __new__(subtype, data, dtype=None, copy=True):
- warnings.warn('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)
- if isinstance(data, matrix):
- dtype2 = data.dtype
- if (dtype is None):
- dtype = dtype2
- if (dtype2 == dtype) and (not copy):
- return data
- return data.astype(dtype)
- if isinstance(data, N.ndarray):
- if dtype is None:
- intype = data.dtype
- else:
- intype = N.dtype(dtype)
- new = data.view(subtype)
- if intype != data.dtype:
- return new.astype(intype)
- if copy: return new.copy()
- else: return new
- if isinstance(data, str):
- data = _convert_from_string(data)
- # now convert data to an array
- arr = N.array(data, dtype=dtype, copy=copy)
- ndim = arr.ndim
- shape = arr.shape
- if (ndim > 2):
- raise ValueError("matrix must be 2-dimensional")
- elif ndim == 0:
- shape = (1, 1)
- elif ndim == 1:
- shape = (1, shape[0])
- order = 'C'
- if (ndim == 2) and arr.flags.fortran:
- order = 'F'
- if not (order or arr.flags.contiguous):
- arr = arr.copy()
- ret = N.ndarray.__new__(subtype, shape, arr.dtype,
- buffer=arr,
- order=order)
- return ret
- def __array_finalize__(self, obj):
- self._getitem = False
- if (isinstance(obj, matrix) and obj._getitem): return
- ndim = self.ndim
- if (ndim == 2):
- return
- if (ndim > 2):
- newshape = tuple([x for x in self.shape if x > 1])
- ndim = len(newshape)
- if ndim == 2:
- self.shape = newshape
- return
- elif (ndim > 2):
- raise ValueError("shape too large to be a matrix.")
- else:
- newshape = self.shape
- if ndim == 0:
- self.shape = (1, 1)
- elif ndim == 1:
- self.shape = (1, newshape[0])
- return
- def __getitem__(self, index):
- self._getitem = True
- try:
- out = N.ndarray.__getitem__(self, index)
- finally:
- self._getitem = False
- if not isinstance(out, N.ndarray):
- return out
- if out.ndim == 0:
- return out[()]
- if out.ndim == 1:
- sh = out.shape[0]
- # Determine when we should have a column array
- try:
- n = len(index)
- except Exception:
- n = 0
- if n > 1 and isscalar(index[1]):
- out.shape = (sh, 1)
- else:
- out.shape = (1, sh)
- return out
- def __mul__(self, other):
- if isinstance(other, (N.ndarray, list, tuple)) :
- # This promotes 1-D vectors to row vectors
- return N.dot(self, asmatrix(other))
- if isscalar(other) or not hasattr(other, '__rmul__') :
- return N.dot(self, other)
- return NotImplemented
- def __rmul__(self, other):
- return N.dot(other, self)
- def __imul__(self, other):
- self[:] = self * other
- return self
- def __pow__(self, other):
- return matrix_power(self, other)
- def __ipow__(self, other):
- self[:] = self ** other
- return self
- def __rpow__(self, other):
- return NotImplemented
- def _align(self, axis):
- """A convenience function for operations that need to preserve axis
- orientation.
- """
- if axis is None:
- return self[0, 0]
- elif axis==0:
- return self
- elif axis==1:
- return self.transpose()
- else:
- raise ValueError("unsupported axis")
- def _collapse(self, axis):
- """A convenience function for operations that want to collapse
- to a scalar like _align, but are using keepdims=True
- """
- if axis is None:
- return self[0, 0]
- else:
- return self
- # Necessary because base-class tolist expects dimension
- # reduction by x[0]
- def tolist(self):
- """
- Return the matrix as a (possibly nested) list.
- See `ndarray.tolist` for full documentation.
- See Also
- --------
- ndarray.tolist
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3,4))); x
- matrix([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- >>> x.tolist()
- [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
- """
- return self.__array__().tolist()
- # To preserve orientation of result...
- def sum(self, axis=None, dtype=None, out=None):
- """
- Returns the sum of the matrix elements, along the given axis.
- Refer to `numpy.sum` for full documentation.
- See Also
- --------
- numpy.sum
- Notes
- -----
- This is the same as `ndarray.sum`, except that where an `ndarray` would
- be returned, a `matrix` object is returned instead.
- Examples
- --------
- >>> x = np.matrix([[1, 2], [4, 3]])
- >>> x.sum()
- 10
- >>> x.sum(axis=1)
- matrix([[3],
- [7]])
- >>> x.sum(axis=1, dtype='float')
- matrix([[3.],
- [7.]])
- >>> out = np.zeros((2, 1), dtype='float')
- >>> x.sum(axis=1, dtype='float', out=np.asmatrix(out))
- matrix([[3.],
- [7.]])
- """
- return N.ndarray.sum(self, axis, dtype, out, keepdims=True)._collapse(axis)
- # To update docstring from array to matrix...
- def squeeze(self, axis=None):
- """
- Return a possibly reshaped matrix.
- Refer to `numpy.squeeze` for more documentation.
- Parameters
- ----------
- axis : None or int or tuple of ints, optional
- Selects a subset of the axes of length one in the shape.
- If an axis is selected with shape entry greater than one,
- an error is raised.
- Returns
- -------
- squeezed : matrix
- The matrix, but as a (1, N) matrix if it had shape (N, 1).
- See Also
- --------
- numpy.squeeze : related function
- Notes
- -----
- If `m` has a single column then that column is returned
- as the single row of a matrix. Otherwise `m` is returned.
- The returned matrix is always either `m` itself or a view into `m`.
- Supplying an axis keyword argument will not affect the returned matrix
- but it may cause an error to be raised.
- Examples
- --------
- >>> c = np.matrix([[1], [2]])
- >>> c
- matrix([[1],
- [2]])
- >>> c.squeeze()
- matrix([[1, 2]])
- >>> r = c.T
- >>> r
- matrix([[1, 2]])
- >>> r.squeeze()
- matrix([[1, 2]])
- >>> m = np.matrix([[1, 2], [3, 4]])
- >>> m.squeeze()
- matrix([[1, 2],
- [3, 4]])
- """
- return N.ndarray.squeeze(self, axis=axis)
- # To update docstring from array to matrix...
- def flatten(self, order='C'):
- """
- Return a flattened copy of the matrix.
- All `N` elements of the matrix are placed into a single row.
- Parameters
- ----------
- order : {'C', 'F', 'A', 'K'}, optional
- 'C' means to flatten in row-major (C-style) order. 'F' means to
- flatten in column-major (Fortran-style) order. 'A' means to
- flatten in column-major order if `m` is Fortran *contiguous* in
- memory, row-major order otherwise. 'K' means to flatten `m` in
- the order the elements occur in memory. The default is 'C'.
- Returns
- -------
- y : matrix
- A copy of the matrix, flattened to a `(1, N)` matrix where `N`
- is the number of elements in the original matrix.
- See Also
- --------
- ravel : Return a flattened array.
- flat : A 1-D flat iterator over the matrix.
- Examples
- --------
- >>> m = np.matrix([[1,2], [3,4]])
- >>> m.flatten()
- matrix([[1, 2, 3, 4]])
- >>> m.flatten('F')
- matrix([[1, 3, 2, 4]])
- """
- return N.ndarray.flatten(self, order=order)
- def mean(self, axis=None, dtype=None, out=None):
- """
- Returns the average of the matrix elements along the given axis.
- Refer to `numpy.mean` for full documentation.
- See Also
- --------
- numpy.mean
- Notes
- -----
- Same as `ndarray.mean` except that, where that returns an `ndarray`,
- this returns a `matrix` object.
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3, 4)))
- >>> x
- matrix([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- >>> x.mean()
- 5.5
- >>> x.mean(0)
- matrix([[4., 5., 6., 7.]])
- >>> x.mean(1)
- matrix([[ 1.5],
- [ 5.5],
- [ 9.5]])
- """
- return N.ndarray.mean(self, axis, dtype, out, keepdims=True)._collapse(axis)
- def std(self, axis=None, dtype=None, out=None, ddof=0):
- """
- Return the standard deviation of the array elements along the given axis.
- Refer to `numpy.std` for full documentation.
- See Also
- --------
- numpy.std
- Notes
- -----
- This is the same as `ndarray.std`, except that where an `ndarray` would
- be returned, a `matrix` object is returned instead.
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3, 4)))
- >>> x
- matrix([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- >>> x.std()
- 3.4520525295346629 # may vary
- >>> x.std(0)
- matrix([[ 3.26598632, 3.26598632, 3.26598632, 3.26598632]]) # may vary
- >>> x.std(1)
- matrix([[ 1.11803399],
- [ 1.11803399],
- [ 1.11803399]])
- """
- return N.ndarray.std(self, axis, dtype, out, ddof, keepdims=True)._collapse(axis)
- def var(self, axis=None, dtype=None, out=None, ddof=0):
- """
- Returns the variance of the matrix elements, along the given axis.
- Refer to `numpy.var` for full documentation.
- See Also
- --------
- numpy.var
- Notes
- -----
- This is the same as `ndarray.var`, except that where an `ndarray` would
- be returned, a `matrix` object is returned instead.
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3, 4)))
- >>> x
- matrix([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- >>> x.var()
- 11.916666666666666
- >>> x.var(0)
- matrix([[ 10.66666667, 10.66666667, 10.66666667, 10.66666667]]) # may vary
- >>> x.var(1)
- matrix([[1.25],
- [1.25],
- [1.25]])
- """
- return N.ndarray.var(self, axis, dtype, out, ddof, keepdims=True)._collapse(axis)
- def prod(self, axis=None, dtype=None, out=None):
- """
- Return the product of the array elements over the given axis.
- Refer to `prod` for full documentation.
- See Also
- --------
- prod, ndarray.prod
- Notes
- -----
- Same as `ndarray.prod`, except, where that returns an `ndarray`, this
- returns a `matrix` object instead.
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3,4))); x
- matrix([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- >>> x.prod()
- 0
- >>> x.prod(0)
- matrix([[ 0, 45, 120, 231]])
- >>> x.prod(1)
- matrix([[ 0],
- [ 840],
- [7920]])
- """
- return N.ndarray.prod(self, axis, dtype, out, keepdims=True)._collapse(axis)
- def any(self, axis=None, out=None):
- """
- Test whether any array element along a given axis evaluates to True.
- Refer to `numpy.any` for full documentation.
- Parameters
- ----------
- axis : int, optional
- Axis along which logical OR is performed
- out : ndarray, optional
- Output to existing array instead of creating new one, must have
- same shape as expected output
- Returns
- -------
- any : bool, ndarray
- Returns a single bool if `axis` is ``None``; otherwise,
- returns `ndarray`
- """
- return N.ndarray.any(self, axis, out, keepdims=True)._collapse(axis)
- def all(self, axis=None, out=None):
- """
- Test whether all matrix elements along a given axis evaluate to True.
- Parameters
- ----------
- See `numpy.all` for complete descriptions
- See Also
- --------
- numpy.all
- Notes
- -----
- This is the same as `ndarray.all`, but it returns a `matrix` object.
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3,4))); x
- matrix([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- >>> y = x[0]; y
- matrix([[0, 1, 2, 3]])
- >>> (x == y)
- matrix([[ True, True, True, True],
- [False, False, False, False],
- [False, False, False, False]])
- >>> (x == y).all()
- False
- >>> (x == y).all(0)
- matrix([[False, False, False, False]])
- >>> (x == y).all(1)
- matrix([[ True],
- [False],
- [False]])
- """
- return N.ndarray.all(self, axis, out, keepdims=True)._collapse(axis)
- def max(self, axis=None, out=None):
- """
- Return the maximum value along an axis.
- Parameters
- ----------
- See `amax` for complete descriptions
- See Also
- --------
- amax, ndarray.max
- Notes
- -----
- This is the same as `ndarray.max`, but returns a `matrix` object
- where `ndarray.max` would return an ndarray.
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3,4))); x
- matrix([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- >>> x.max()
- 11
- >>> x.max(0)
- matrix([[ 8, 9, 10, 11]])
- >>> x.max(1)
- matrix([[ 3],
- [ 7],
- [11]])
- """
- return N.ndarray.max(self, axis, out, keepdims=True)._collapse(axis)
- def argmax(self, axis=None, out=None):
- """
- Indexes of the maximum values along an axis.
- Return the indexes of the first occurrences of the maximum values
- along the specified axis. If axis is None, the index is for the
- flattened matrix.
- Parameters
- ----------
- See `numpy.argmax` for complete descriptions
- See Also
- --------
- numpy.argmax
- Notes
- -----
- This is the same as `ndarray.argmax`, but returns a `matrix` object
- where `ndarray.argmax` would return an `ndarray`.
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3,4))); x
- matrix([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- >>> x.argmax()
- 11
- >>> x.argmax(0)
- matrix([[2, 2, 2, 2]])
- >>> x.argmax(1)
- matrix([[3],
- [3],
- [3]])
- """
- return N.ndarray.argmax(self, axis, out)._align(axis)
- def min(self, axis=None, out=None):
- """
- Return the minimum value along an axis.
- Parameters
- ----------
- See `amin` for complete descriptions.
- See Also
- --------
- amin, ndarray.min
- Notes
- -----
- This is the same as `ndarray.min`, but returns a `matrix` object
- where `ndarray.min` would return an ndarray.
- Examples
- --------
- >>> x = -np.matrix(np.arange(12).reshape((3,4))); x
- matrix([[ 0, -1, -2, -3],
- [ -4, -5, -6, -7],
- [ -8, -9, -10, -11]])
- >>> x.min()
- -11
- >>> x.min(0)
- matrix([[ -8, -9, -10, -11]])
- >>> x.min(1)
- matrix([[ -3],
- [ -7],
- [-11]])
- """
- return N.ndarray.min(self, axis, out, keepdims=True)._collapse(axis)
- def argmin(self, axis=None, out=None):
- """
- Indexes of the minimum values along an axis.
- Return the indexes of the first occurrences of the minimum values
- along the specified axis. If axis is None, the index is for the
- flattened matrix.
- Parameters
- ----------
- See `numpy.argmin` for complete descriptions.
- See Also
- --------
- numpy.argmin
- Notes
- -----
- This is the same as `ndarray.argmin`, but returns a `matrix` object
- where `ndarray.argmin` would return an `ndarray`.
- Examples
- --------
- >>> x = -np.matrix(np.arange(12).reshape((3,4))); x
- matrix([[ 0, -1, -2, -3],
- [ -4, -5, -6, -7],
- [ -8, -9, -10, -11]])
- >>> x.argmin()
- 11
- >>> x.argmin(0)
- matrix([[2, 2, 2, 2]])
- >>> x.argmin(1)
- matrix([[3],
- [3],
- [3]])
- """
- return N.ndarray.argmin(self, axis, out)._align(axis)
- def ptp(self, axis=None, out=None):
- """
- Peak-to-peak (maximum - minimum) value along the given axis.
- Refer to `numpy.ptp` for full documentation.
- See Also
- --------
- numpy.ptp
- Notes
- -----
- Same as `ndarray.ptp`, except, where that would return an `ndarray` object,
- this returns a `matrix` object.
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3,4))); x
- matrix([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- >>> x.ptp()
- 11
- >>> x.ptp(0)
- matrix([[8, 8, 8, 8]])
- >>> x.ptp(1)
- matrix([[3],
- [3],
- [3]])
- """
- return N.ndarray.ptp(self, axis, out)._align(axis)
- @property
- def I(self):
- """
- Returns the (multiplicative) inverse of invertible `self`.
- Parameters
- ----------
- None
- Returns
- -------
- ret : matrix object
- If `self` is non-singular, `ret` is such that ``ret * self`` ==
- ``self * ret`` == ``np.matrix(np.eye(self[0,:].size))`` all return
- ``True``.
- Raises
- ------
- numpy.linalg.LinAlgError: Singular matrix
- If `self` is singular.
- See Also
- --------
- linalg.inv
- Examples
- --------
- >>> m = np.matrix('[1, 2; 3, 4]'); m
- matrix([[1, 2],
- [3, 4]])
- >>> m.getI()
- matrix([[-2. , 1. ],
- [ 1.5, -0.5]])
- >>> m.getI() * m
- matrix([[ 1., 0.], # may vary
- [ 0., 1.]])
- """
- M, N = self.shape
- if M == N:
- from numpy.linalg import inv as func
- else:
- from numpy.linalg import pinv as func
- return asmatrix(func(self))
- @property
- def A(self):
- """
- Return `self` as an `ndarray` object.
- Equivalent to ``np.asarray(self)``.
- Parameters
- ----------
- None
- Returns
- -------
- ret : ndarray
- `self` as an `ndarray`
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3,4))); x
- matrix([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- >>> x.getA()
- array([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- """
- return self.__array__()
- @property
- def A1(self):
- """
- Return `self` as a flattened `ndarray`.
- Equivalent to ``np.asarray(x).ravel()``
- Parameters
- ----------
- None
- Returns
- -------
- ret : ndarray
- `self`, 1-D, as an `ndarray`
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3,4))); x
- matrix([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11]])
- >>> x.getA1()
- array([ 0, 1, 2, ..., 9, 10, 11])
- """
- return self.__array__().ravel()
- def ravel(self, order='C'):
- """
- Return a flattened matrix.
- Refer to `numpy.ravel` for more documentation.
- Parameters
- ----------
- order : {'C', 'F', 'A', 'K'}, optional
- The elements of `m` are read using this index order. 'C' means to
- index the elements in C-like order, with the last axis index
- changing fastest, back to the first axis index changing slowest.
- 'F' means to index the elements in Fortran-like index order, with
- the first index changing fastest, and the last index changing
- slowest. Note that the 'C' and 'F' options take no account of the
- memory layout of the underlying array, and only refer to the order
- of axis indexing. 'A' means to read the elements in Fortran-like
- index order if `m` is Fortran *contiguous* in memory, C-like order
- otherwise. 'K' means to read the elements in the order they occur
- in memory, except for reversing the data when strides are negative.
- By default, 'C' index order is used.
- Returns
- -------
- ret : matrix
- Return the matrix flattened to shape `(1, N)` where `N`
- is the number of elements in the original matrix.
- A copy is made only if necessary.
- See Also
- --------
- matrix.flatten : returns a similar output matrix but always a copy
- matrix.flat : a flat iterator on the array.
- numpy.ravel : related function which returns an ndarray
- """
- return N.ndarray.ravel(self, order=order)
- @property
- def T(self):
- """
- Returns the transpose of the matrix.
- Does *not* conjugate! For the complex conjugate transpose, use ``.H``.
- Parameters
- ----------
- None
- Returns
- -------
- ret : matrix object
- The (non-conjugated) transpose of the matrix.
- See Also
- --------
- transpose, getH
- Examples
- --------
- >>> m = np.matrix('[1, 2; 3, 4]')
- >>> m
- matrix([[1, 2],
- [3, 4]])
- >>> m.getT()
- matrix([[1, 3],
- [2, 4]])
- """
- return self.transpose()
- @property
- def H(self):
- """
- Returns the (complex) conjugate transpose of `self`.
- Equivalent to ``np.transpose(self)`` if `self` is real-valued.
- Parameters
- ----------
- None
- Returns
- -------
- ret : matrix object
- complex conjugate transpose of `self`
- Examples
- --------
- >>> x = np.matrix(np.arange(12).reshape((3,4)))
- >>> z = x - 1j*x; z
- matrix([[ 0. +0.j, 1. -1.j, 2. -2.j, 3. -3.j],
- [ 4. -4.j, 5. -5.j, 6. -6.j, 7. -7.j],
- [ 8. -8.j, 9. -9.j, 10.-10.j, 11.-11.j]])
- >>> z.getH()
- matrix([[ 0. -0.j, 4. +4.j, 8. +8.j],
- [ 1. +1.j, 5. +5.j, 9. +9.j],
- [ 2. +2.j, 6. +6.j, 10.+10.j],
- [ 3. +3.j, 7. +7.j, 11.+11.j]])
- """
- if issubclass(self.dtype.type, N.complexfloating):
- return self.transpose().conjugate()
- else:
- return self.transpose()
- # kept for compatibility
- getT = T.fget
- getA = A.fget
- getA1 = A1.fget
- getH = H.fget
- getI = I.fget
- def _from_string(str, gdict, ldict):
- rows = str.split(';')
- rowtup = []
- for row in rows:
- trow = row.split(',')
- newrow = []
- for x in trow:
- newrow.extend(x.split())
- trow = newrow
- coltup = []
- for col in trow:
- col = col.strip()
- try:
- thismat = ldict[col]
- except KeyError:
- try:
- thismat = gdict[col]
- except KeyError as e:
- raise NameError(f"name {col!r} is not defined") from None
- coltup.append(thismat)
- rowtup.append(concatenate(coltup, axis=-1))
- return concatenate(rowtup, axis=0)
- @set_module('numpy')
- def bmat(obj, ldict=None, gdict=None):
- """
- Build a matrix object from a string, nested sequence, or array.
- Parameters
- ----------
- obj : str or array_like
- Input data. If a string, variables in the current scope may be
- referenced by name.
- ldict : dict, optional
- A dictionary that replaces local operands in current frame.
- Ignored if `obj` is not a string or `gdict` is None.
- gdict : dict, optional
- A dictionary that replaces global operands in current frame.
- Ignored if `obj` is not a string.
- Returns
- -------
- out : matrix
- Returns a matrix object, which is a specialized 2-D array.
- See Also
- --------
- block :
- A generalization of this function for N-d arrays, that returns normal
- ndarrays.
- Examples
- --------
- >>> A = np.mat('1 1; 1 1')
- >>> B = np.mat('2 2; 2 2')
- >>> C = np.mat('3 4; 5 6')
- >>> D = np.mat('7 8; 9 0')
- All the following expressions construct the same block matrix:
- >>> np.bmat([[A, B], [C, D]])
- matrix([[1, 1, 2, 2],
- [1, 1, 2, 2],
- [3, 4, 7, 8],
- [5, 6, 9, 0]])
- >>> np.bmat(np.r_[np.c_[A, B], np.c_[C, D]])
- matrix([[1, 1, 2, 2],
- [1, 1, 2, 2],
- [3, 4, 7, 8],
- [5, 6, 9, 0]])
- >>> np.bmat('A,B; C,D')
- matrix([[1, 1, 2, 2],
- [1, 1, 2, 2],
- [3, 4, 7, 8],
- [5, 6, 9, 0]])
- """
- if isinstance(obj, str):
- if gdict is None:
- # get previous frame
- frame = sys._getframe().f_back
- glob_dict = frame.f_globals
- loc_dict = frame.f_locals
- else:
- glob_dict = gdict
- loc_dict = ldict
- return matrix(_from_string(obj, glob_dict, loc_dict))
- if isinstance(obj, (tuple, list)):
- # [[A,B],[C,D]]
- arr_rows = []
- for row in obj:
- if isinstance(row, N.ndarray): # not 2-d
- return matrix(concatenate(obj, axis=-1))
- else:
- arr_rows.append(concatenate(row, axis=-1))
- return matrix(concatenate(arr_rows, axis=0))
- if isinstance(obj, N.ndarray):
- return matrix(obj)
- mat = asmatrix
|