def trapz2d(y, dx=1, dy=1):
"""y: 2d array
>>> trapz2d(np.ones((5, 5)))
16.0
"""
y = np.asarray(y)
s = y.sum()
s -= 0.50 * (y[0, :].sum() + y[-1, :].sum() + y[:, 0].sum() + y[:, -1].sum())
s += 0.25 * (y[0, 0] + y[0, -1] + y[-1, 0] + y[-1, -1])
return s * (dx * dy)