<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Meshgrid  & mgrid
x - jest najszybciej zmieniajacym się wskażnikiem (row-major) więc indeskowanie trzeba "odwrócic" względem kolejności argumentów w funkcji f
Step1:  Porównanie z próbkowaniem "ręcznym"
Step2:  Dobrze
Step3:  Z jest row major więc można też napisać
Step4:  mgrid
mgrid zachowuje się odwrotnie
X,Y = np.meshgrid(np.arange(0,nx),np.arange(0,ny))
Yn, Xn = np.mgrid[0
Step5:  Zresztą sprawdzmy
<ASSISTANT_TASK:>
Python Code:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
nx = 11
ny = 5
x1,y1 = 1,2
X,Y = np.meshgrid(np.linspace(0,x1,nx),np.linspace(0,y1,ny))
X.shape
f = lambda X_,Y_:np.sin(X_**2+Y_**2)
Z = f(X,Y)
plt.contourf(X,Y,Z)
# To samo co:
# plt.contourf(X.T,Y.T,Z.T)
plt.imshow(Z,interpolation='nearest',origin='lower')
X
Y
Explanation: Meshgrid  & mgrid
x - jest najszybciej zmieniajacym się wskażnikiem (row-major) więc indeskowanie trzeba "odwrócic" względem kolejności argumentów w funkcji f:
$$x,y \to j,i$$
End of explanation
i,j = 2,3
print ("dla x i y", X[i,j],Y[i,j],"jest", Z[i,j],f(X[i,j],Y[i,j]),\
      "powinno byc rowne", f(x1/float(nx-1)*i,y1/float(ny-1)*j) )
Explanation: Porównanie z próbkowaniem "ręcznym":
End of explanation
i,j = 2,3
print ("dla x i y" ,X[j,i],Y[j,i],"jest", Z[j,i],f(X[j,i],Y[j,i]),\
    "powinno byc rowne", f(x1/float(nx-1)*i,y1/float(ny-1)*j))
Explanation: Dobrze:
End of explanation
print Z[j,i],Z.flatten()[j*nx+i]
Explanation: Z jest row major więc można też napisać:
End of explanation
Yn, Xn = np.mgrid[0:ny,0:nx]
Xn.shape
Xn
Yn
Xn/(float(nx-1)*x1)
X1,Y1 = Xn*(x1/float(nx-1)),Yn*(y1/float(ny-1))
np.allclose(X, X1),np.allclose(Y, Y1),np.allclose(Y, Y1)
Explanation: mgrid
mgrid zachowuje się odwrotnie
X,Y = np.meshgrid(np.arange(0,nx),np.arange(0,ny))
Yn, Xn = np.mgrid[0:ny,0:nx]
End of explanation
Z.strides
np.meshgrid(np.arange(nx),np.arange(ny))
list(reversed(np.mgrid[0:ny,0:nx]))
np.meshgrid(np.arange(ny),np.arange(nx),indexing='ij')
np.mgrid[0:ny,0:nx]
Explanation: Zresztą sprawdzmy:
End of explanation
<END_TASK>