Could not find a shorter way, than this one
import numpy as np
from scipy.cluster.vq import vq
X = np.array([[ 2., 4., 2.],
[ 1., 3., 1.],
[ 3., 4., 2.],
[ 2., 3., 2.],
[ 1., 5., 5.]])
codebook = np.array([[ 1. , 3. , 1. ],
[ 2.33, 3.67, 2. ],
[ 1. , 5. , 5. ]])
partition, euc_distance_to_centroids = vq(X, codebook)
TSS = np.sum((X-X.mean(0))**2)
SSW = np.sum(euc_distance_to_centroids**2)
SSB = TSS - SSW
# The 'direct' way
B = []
c = X.mean(0)
for i in range(partition.max()+1):
ci = X[partition == i].mean(0)
B.append(np.bincount(partition)[i]*np.sum((ci - c)**2))
SSB_ = np.sum(B)
print(TSS, SSW, SSB, SSB_)