summaryrefslogtreecommitdiff
path: root/numpy/linalg/linalg.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/linalg/linalg.py')
-rw-r--r--numpy/linalg/linalg.py10
1 files changed, 4 insertions, 6 deletions
diff --git a/numpy/linalg/linalg.py b/numpy/linalg/linalg.py
index 6002c63b9..3b83ac4a6 100644
--- a/numpy/linalg/linalg.py
+++ b/numpy/linalg/linalg.py
@@ -1516,8 +1516,8 @@ def matrix_rank(M, tol=None):
Parameters
----------
- M : {(M,), (M, N)} array_like
- array of <=2 dimensions
+ M : {(M,), (..., M, N)} array_like
+ input vector or stack of matrices
tol : {None, float}, optional
threshold below which SVD values are considered zero. If `tol` is
None, and ``S`` is an array with singular values for `M`, and
@@ -1584,14 +1584,12 @@ def matrix_rank(M, tol=None):
0
"""
M = asarray(M)
- if M.ndim > 2:
- raise TypeError('array should have 2 or fewer dimensions')
if M.ndim < 2:
return int(not all(M==0))
S = svd(M, compute_uv=False)
if tol is None:
- tol = S.max() * max(M.shape) * finfo(S.dtype).eps
- return sum(S > tol)
+ tol = S.max(axis=-1, keepdims=True) * max(M.shape[-2:]) * finfo(S.dtype).eps
+ return (S > tol).sum(axis=-1)
# Generalized inverse