API changes should hit the mailing list, so I am copying from PR
https://github.com/numpy/numpy/pull/25914 by Aaron Meurer:
<quote>
Previously the np.linalg.solve documentation stated:
|a : (..., M, M) array_like Coefficient matrix. b : {(..., M,), (..., M,
K)}, array_like |
however, this is inherently ambiguous. For example, if a has shape (2,
2, 2) and b has shape (2, 2), b could be treated as a (2,) stack of (2,)
column vectors, in which case the result should have shape (2, 2), or as
a single 2x2 matrix, in which case, the result should have shape (2, 2, 2).
NumPy resolved this ambiguity in a confusing way, which was to treat b
as (..., M) whenever b.ndim == a.ndim - 1, and as (..., M, K) otherwise.
A much more consistent way to handle this ambiguity is to treat b as a
single vector if and only if it is 1-dimensional, i.e., use
|b : {(M,), (..., M, K)}, array_like |
This is consistent with, for instance, the matmul operator, which only
uses the special 1-D vector logic if an operand is exactly
1-dimensional, and treats the operands as (stacks of) 2-D matrices
otherwise. The PRĀ updates np.linalg.solve() to use this behavior.
This is a backwards compatibility break, as any instance where the b
array has more than one dimension and exactly one fewer dimension than
the a array will now use the matrix logic, potentially returning a
different result with a different shape. The previous behavior can be
manually emulated with something like
np.solve(a,b[...,None])[...,0]
since b as a (M,) vector is equivalent to b as a (M, 1) matrix (or the
user could manually import and use the internal solve1() gufunc which
implements the b-as-vector logic).
This change aligns the solve() function with the array API, which
resolves this broadcasting ambiguity in this way. See
https://data-apis.org/array-api/latest/extensions/generated/array_api.linalg.solve.html#array_api.linalg.solve
</quote>
Matti
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com