<pre><code>import numpy as np
import matplotlib.pyplot as plt
def unpackbits(a, n):
''' Unpacks an integer `a` to n-length binary list. '''
return [a >> i & 1 for i in range(n-1,-1,-1)]
def similarity(a, b, n):
''' Similarity between n-length binary lists obtained from unpacking
the integers a and b. '''
a_unpacked = unpackbits(a, n)
b_unpacked = unpackbits(b, n)
return np.sum(np.isclose(a_unpacked, b_unpacked))/n
# Plot
n = 3
x = np.arange(2**n+1)
y = np.arange(2**n+1)
xx, yy = np.meshgrid(x, x)
z = np.vectorize(similarity)(yy[:-1,:-1], xx[:-1,:-1], n)
labels = [unpackbits(i, n) for i in x]
cmap = plt.cm.get_cmap('binary', n+1)
fig, ax = plt.subplots()
pc = ax.pcolor(x, y, z, cmap=cmap, edgecolor='k', vmin = 0, vmax=1)
ax.set_xticks(x + 0.5)
ax.set_yticks(y + 0.5)
ax.set_xlim(0, 2**n)
ax.set_ylim(0, 2**n)
ax.set_xticklabels(labels, rotation=45)
ax.set_yticklabels(labels)
cbar = fig.colorbar(pc, ax=ax, ticks=[i/n for i in range(n+1)])
cbar.ax.set_ylabel('similarity', fontsize=14)
ax.set_aspect('equal', adjustable='box')
plt.tight_layout()
plt.show()
</code></pre>
<p><a href="https://i.stack.imgur.com/G4szs.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/G4szs.png" alt="enter image description here"/></a></p>