あなたsharex=True, sharey=True
が得ることなく:

それを使えば、より良くなるはずです:
fig, axes2d = plt.subplots(nrows=3, ncols=3,
sharex=True, sharey=True,
figsize=(6,6))
for i, row in enumerate(axes2d):
for j, cell in enumerate(row):
cell.imshow(np.random.rand(32,32))
plt.tight_layout()

ただし、追加のラベルを追加する場合は、エッジ プロットにのみ追加する必要があります。
fig, axes2d = plt.subplots(nrows=3, ncols=3,
sharex=True, sharey=True,
figsize=(6,6))
for i, row in enumerate(axes2d):
for j, cell in enumerate(row):
cell.imshow(np.random.rand(32,32))
if i == len(axes2d) - 1:
cell.set_xlabel("noise column: {0:d}".format(j + 1))
if j == 0:
cell.set_ylabel("noise row: {0:d}".format(i + 1))
plt.tight_layout()

各プロットにラベルを追加すると、それが台無しになります(ラベルの繰り返しを自動的に検出する方法があるかもしれませんが、私はそれを知りません)。