[Numpy-discussion] Change in behaviour: broadcasting rules for np.solve

2024-03-06 Thread Matti Picus
API changes should hit the mailing list, so I am copying from PR 
https://github.com/numpy/numpy/pull/25914 by Aaron Meurer:





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





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


[Numpy-discussion] [ANN] Numba User Survey 2024

2024-03-06 Thread Emergency Self-Construct
Hello everyone,

The Numba project is currently running a user survey. Please find more
information on the Numba discourse:

https://numba.discourse.group/t/numba-user-survey-2024/2411

If you have any experience with Numba, your participation would be
greatly appreciated. In only takes about 5 minutes to complete.

-esc
___
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