Skip to content

Commit 86330a9

Browse files
committed
fixed bugs in data_graph, dpt and tsne
1 parent f0cfad6 commit 86330a9

File tree

3 files changed

+20
-19
lines changed

3 files changed

+20
-19
lines changed

scanpy/data_structs/data_graph.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,19 @@ def __init__(self,
174174
recompute_graph=None,
175175
flavor='haghverdi16'):
176176
self.sym = True # we do not allow asymetric cases
177+
self.flavor = flavor # this is to experiment around
178+
self.n_pcs = n_pcs
179+
self.n_dcs = n_dcs
177180
# use the graph in adata
178181
if (not recompute_graph
182+
# make sure X_diffmap is there
179183
and 'X_diffmap' in adata.smp
180-
and adata.smp['X_diffmap'].shape[1] >= n_dcs-1):
181-
self.n_pcs = n_pcs
182-
self.n_dcs = n_dcs
184+
# make sure enough DCs are there
185+
and adata.smp['X_diffmap'].shape[1] >= n_dcs-1
186+
# make sure that it's sparse
187+
and issparse(adata.add['Ktilde']) == knn
188+
# make sure n_neighbors matches
189+
and k == adata.add['distance'][0].nonzero()[0].size + 1):
183190
self.init_iroot_directly(adata)
184191
self.X = adata.X # this is a hack, PCA?
185192
self.knn = issparse(adata.add['Ktilde'])
@@ -188,7 +195,7 @@ def __init__(self,
188195
if self.knn:
189196
self.k = adata.add['distance'][0].nonzero()[0].size + 1
190197
else:
191-
self.k = adata.X.shape[0]
198+
self.k = None # currently do not store this, is unknown
192199
# for output of spectrum
193200
self.X_diffmap = adata.smp['X_diffmap'][:, :n_dcs-1]
194201
self.evals = np.r_[1, adata.add['diffmap_evals'][:n_dcs-1]]
@@ -205,7 +212,7 @@ def __init__(self,
205212
# recompute the graph
206213
else:
207214
self.k = k if k is not None else 30
208-
logg.info('compute data graph with `n_neighbors={}`'
215+
logg.info(' computing data graph with n_neighbors = {} '
209216
.format(self.k))
210217
self.evals = None
211218
self.rbasis = None
@@ -214,13 +221,8 @@ def __init__(self,
214221
self.Dsq = None
215222
self.knn = knn
216223
self.n_jobs = sett.n_jobs if n_jobs is None else n_jobs
217-
self.n_pcs = n_pcs
218-
self.n_dcs = n_dcs
219-
self.flavor = flavor # this is to experiment around
220-
self.iroot = None
221224
self.X = adata.X # might be overwritten with X_pca below
222225
self.Dchosen = None
223-
self.M = None
224226
self.init_iroot_and_X_from_PCA(adata, recompute_pca, n_pcs)
225227
if False: # TODO
226228
# in case we already computed distance relations
@@ -233,16 +235,15 @@ def __init__(self,
233235
self.Dsq = adata.add['distance']
234236

235237
def init_iroot_directly(self, adata):
238+
self.iroot = None
236239
if 'iroot' in adata.add:
237240
if adata.add['iroot'] >= adata.n_smps:
238241
logg.warn('Root cell index {} does not exist for {} samples. '
239242
'Is ignored.'
240243
.format(adata.add['iroot'], adata.n_smps))
241-
self.iroot = None
242244
else:
243245
self.iroot = adata.add['iroot']
244-
245-
246+
246247
def init_iroot_and_X_from_PCA(self, adata, recompute_pca, n_pcs):
247248
# retrieve xroot
248249
xroot = None
@@ -281,7 +282,7 @@ def update_diffmap(self, n_comps=None):
281282
self.n_dcs = n_comps
282283
logg.info(' updating number of DCs to', self.n_dcs)
283284
if self.evals is None or self.evals.size < self.n_dcs:
284-
logg.info('computing spectral decomposition ("diffmap") with',
285+
logg.info(' computing spectral decomposition ("diffmap") with',
285286
self.n_dcs, 'components', r=True)
286287
self.compute_transition_matrix()
287288
self.embed(n_evals=self.n_dcs)

scanpy/tools/dpt.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ def dpt(adata, n_branchings=0, n_neighbors=30, knn=True, n_pcs=50, n_dcs=10,
107107
logg.hint(msg)
108108
if n_branchings == 0:
109109
logg.m('set parameter `n_branchings` > 0 to detect branchings', v='hint')
110+
logg.m('perform Diffusion Pseudotime analysis', r=True)
110111
dpt = DPT(adata, n_neighbors=n_neighbors, knn=knn, n_pcs=n_pcs, n_dcs=n_dcs,
111112
min_group_size=min_group_size, n_jobs=n_jobs,
112113
recompute_graph=recompute_graph, recompute_pca=recompute_pca,
@@ -118,8 +119,7 @@ def dpt(adata, n_branchings=0, n_neighbors=30, knn=True, n_pcs=50, n_dcs=10,
118119
adata.add['diffmap_evals'] = dpt.evals[1:]
119120
if knn: adata.add['distance'] = dpt.Dsq
120121
if knn: adata.add['Ktilde'] = dpt.Ktilde
121-
logg.m('perform Diffusion Pseudotime analysis', r=True)
122-
if n_branchings > 1: logg.info('... this uses a hierarchical implementation')
122+
if n_branchings > 1: logg.info(' this uses a hierarchical implementation')
123123
# compute DPT distance matrix, which we refer to as 'Ddiff'
124124
if dpt.iroot is not None:
125125
dpt.set_pseudotime() # pseudotimes are distances from root point

scanpy/tools/tsne.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def tsne(adata, random_state=0, n_pcs=50, perplexity=30, learning_rate=None,
6464
Multicore-TSNE
6565
GitHub (2017)
6666
"""
67-
logg.info('compute tSNE', r=True)
67+
logg.info('computing tSNE', r=True)
6868
adata = adata.copy() if copy else adata
6969
# preprocessing by PCA
7070
if 'X_pca' in adata.smp and adata.smp['X_pca'].shape[1] >= n_pcs:
@@ -74,7 +74,7 @@ def tsne(adata, random_state=0, n_pcs=50, perplexity=30, learning_rate=None,
7474
else:
7575
if n_pcs > 0 and adata.X.shape[1] > n_pcs:
7676
logg.info(' preprocess using PCA with', n_pcs, 'PCs')
77-
logg.info('avoid this by setting n_pcs = 0', v='hint')
77+
logg.hint('avoid this by setting n_pcs = 0')
7878
X = pca(adata.X, random_state=random_state, n_comps=n_pcs)
7979
adata.smp['X_pca'] = X
8080
logg.info(' using', n_pcs, 'principal components')
@@ -95,7 +95,7 @@ def tsne(adata, random_state=0, n_pcs=50, perplexity=30, learning_rate=None,
9595
from MulticoreTSNE import MulticoreTSNE as TSNE
9696
params_sklearn['learning_rate'] = 200 if learning_rate is None else learning_rate
9797
tsne = TSNE(n_jobs=n_jobs, **params_sklearn)
98-
logg.info(' using package MulticoreTSNE')
98+
logg.info(' using package MulticoreTSNE by D. Ulyanov')
9999
X_tsne = tsne.fit_transform(X.astype(np.float64))
100100
except ImportError:
101101
multicore_failed = True

0 commit comments

Comments
 (0)