I want to fit a function
f:(Weight,Length)-> Z
to a 2D surface using numpy.linalg.lstsq.
My dataset Z is defined in a (Weight,Length) plane. However I have erased the values that are not relevant: All absolute values larger than 3.3 is set to NaN using:
Z=np.where(np.abs(Z)>3.3,np.NaN,Z)
I do not want the algorithm to work hard to get a match where it is not important, sacrificing precision where it actually matters.
I have rendered the values I want to fit for illustration. Btw. my model is a 2d polynom.

I want to calculate least square roots using numpy. As I have NaN values, I have decided to mask them using:
Z = np.ma.array(Z, mask=np.isnan(Z)) # Use a mask to mark the NaNs
But the call
c, r, rank, s = np.linalg.lstsq(A, Z, rcond=None)
Still gives the known error
LinAlgError: SVD did not converge in Linear Least Squares
The code itself works if I do not set values to NaN.
How can I run the fit with NaN values, telling numpy to ignore those?