Some rows/cols are all-zero because those corresponding elements are not present in the sample from which covariance is calculated. I'm doing it this way:
... adjmats = [get_adjmat(graph) for graph in samples] # array of adjacency matrices reduced = functools.reduce(lambda x, y: np.add(x, y), adjmats) # add all elem-wise adjacency = np.divide(reduced, len(adjmats)) # divide by number: "mean" fig, ax = plt.subplots() covariance= np.cov(adjacency) # getting covariance def correlation_from_covariance(covariance): v = np.sqrt(np.diag(covariance)) outer_v = np.outer(v, v) correlation = covariance / outer_v <<<<<< # complains here! correlation[covariance == 0] = 0 return correlation correlation = correlation_from_covariance(covariance) # attempting to convert im = ax.imshow(correlation)
When i try to get the correlation matrix, which i vaguely know to be the std-"normalized" version of covariance matrix, numpy complains :
subunit_graph.py:218: RuntimeWarning: invalid value encountered in true_divide correlation = covariance / outer_v, but i still get a sensible correlation matrix. Can somebody explain to me what exactly is going on with
true_divide in there?
Thank you very much!