def _find_clusters_1dir(x, x_in, connectivity, max_step, t_power, ndimage):
"""Actually call the clustering algorithm"""
if connectivity is None:
labels, n_labels = ndimage.label(x_in)
if x.ndim == 1:
# slices
clusters = ndimage.find_objects(labels, n_labels)
if len(clusters) == 0:
sums = list()
else:
index = list(range(1, n_labels + 1))
if t_power == 1:
sums = ndimage.measurements.sum(x, labels, index=index)
else:
sums = ndimage.measurements.sum(np.sign(x) *
np.abs(x) ** t_power,
labels, index=index)
else:
# boolean masks (raveled)
clusters = list()
sums = np.empty(n_labels)
for l in range(1, n_labels + 1):
c = labels == l
clusters.append(c.ravel())
if t_power == 1:
sums[l - 1] = np.sum(x[c])
else:
sums[l - 1] = np.sum(np.sign(x[c]) *
np.abs(x[c]) ** t_power)
else:
if x.ndim > 1:
raise Exception("Data should be 1D when using a connectivity "
"to define clusters.")
if isinstance(connectivity, sparse.spmatrix):
clusters = _get_components(x_in, connectivity)
elif isinstance(connectivity, list): # use temporal adjacency
clusters = _get_clusters_st(x_in, connectivity, max_step)
else:
raise ValueError('Connectivity must be a sparse matrix or list')
if t_power == 1:
sums = np.array([np.sum(x[c]) for c in clusters])
else:
sums = np.array([np.sum(np.sign(x[c]) * np.abs(x[c]) ** t_power)
for c in clusters])
return clusters, np.atleast_1d(sums)
cluster_level.py 文件源码
python
阅读 21
收藏 0
点赞 0
评论 0
评论列表
文章目录