def get_adjacency_matrix(out_dir, sid, expt_id):
"Returns the adjacency matrix"
vec_path = pjoin(out_dir, sid, '{}_graynet.csv'.format(expt_id))
edge_vec = np.genfromtxt(vec_path)
matrix_size = np.int64( (1.0 + np.sqrt(1.0+8.0*len(edge_vec)))/2.0 )
edge_mat = np.zeros([matrix_size, matrix_size])
# making this symmetric as required by nilearn's plot_connectome (stupid)
# upper tri; diag +1; # lower tri; diag -1
upper_tri = np.triu_indices_from(edge_mat, +1)
lower_tri = np.tril_indices_from(edge_mat, -1)
edge_mat[upper_tri] = edge_vec
edge_mat[lower_tri] = edge_mat.T[lower_tri]
return edge_mat
python类tril_indices_from()的实例源码
def _data_iter_ma(self, data, randomize):
if data is None:
data_ma = self.frontend.data_ma
else:
data_ma = data
order = np.arange(data_ma.size).reshape(data_ma.shape)
masked = order[data_ma.mask]
if self._is_symmetric:
tril = np.tril_indices_from(data_ma, -1)
tril = order[tril]
masked = np.append(masked, tril)
# Remove masked value to the iteration list
order = np.delete(order, masked)
# Get the indexes of nodes (i,j) for each observed interactions
order = list(zip(*np.unravel_index(order, data_ma.shape)))
if randomize is True:
np.random.shuffle(order)
return order
def data_iter(self, randomize=True):
if not hasattr(self, '_order'):
order = np.arange(self.data_ma.size).reshape(self.data_ma.shape)
masked = order[self.data_ma.mask]
if self._symmetric:
tril = np.tril_indices_from(self.data_ma, -1)
tril = order[tril]
masked = np.append(masked, tril)
# Remove masked value to the iteration list
order = np.delete(order, masked)
# Get the indexes of nodes (i,j) for each observed interactions
order = list(zip(*np.unravel_index(order, self.data_ma.shape)))
self._order = order
else:
order = self._order
if randomize is True:
np.random.shuffle(order)
return order
# @debug: symmetric matrix ?
def read_triangular(filepath):
"""Open Pi matrix output from SLICE.
All matrix opening functions return first the
genomic windows corresponding to the axes of the
proximity matrix, then the proximity matrix itself.
Since SLICE output matrices do not embed the genomic
locations of the windows, the first return value is
None.
:param str filepath: Path to the SLICE output file
:returns: (None, SLICE Pi matrix)
"""
with open(filepath) as in_data:
arr = [[float(i) for i in line.split()] for line in in_data]
size = len(arr[-1])
proximity_matrix = np.zeros((size, size))
lower_i = np.tril_indices_from(proximity_matrix)
upper_i = np.triu_indices_from(proximity_matrix)
proximity_matrix[:] = np.NAN
proximity_matrix[lower_i] = list(itertools.chain(*arr))
proximity_matrix[upper_i] = proximity_matrix.T[upper_i]
proximity_matrix[proximity_matrix > 1.] = np.NAN
return None, proximity_matrix