|
11 | 11 | import os |
12 | 12 | import os.path as op |
13 | 13 | from collections import OrderedDict |
| 14 | +from itertools import chain |
14 | 15 |
|
15 | 16 | import nibabel as nb |
16 | 17 | import numpy as np |
@@ -1262,11 +1263,18 @@ def compute_noise_components(imgseries, mask_images, components_criterion=0.5, |
1262 | 1263 | Dictionary of eigenvalues, fractional explained variances, and |
1263 | 1264 | cumulative explained variances. |
1264 | 1265 | """ |
1265 | | - components = None |
1266 | 1266 | basis = np.array([]) |
1267 | 1267 | if components_criterion == 'all': |
1268 | 1268 | components_criterion = -1 |
1269 | 1269 | mask_names = mask_names or range(len(mask_images)) |
| 1270 | + |
| 1271 | + comp_list = [] |
| 1272 | + md_mask = [] |
| 1273 | + md_sv = [] |
| 1274 | + md_var = [] |
| 1275 | + md_cumvar = [] |
| 1276 | + md_retained = [] |
| 1277 | + |
1270 | 1278 | for name, img in zip(mask_names, mask_images): |
1271 | 1279 | mask = nb.squeeze_image(img).get_data().astype(np.bool) |
1272 | 1280 | if imgseries.shape[:3] != mask.shape: |
@@ -1331,32 +1339,30 @@ def compute_noise_components(imgseries, mask_images, components_criterion=0.5, |
1331 | 1339 | num_components = int(num_components) |
1332 | 1340 | if num_components == 0: |
1333 | 1341 | break |
1334 | | - if components is None: |
1335 | | - components = u[:, :num_components] |
1336 | | - metadata = OrderedDict() |
1337 | | - metadata['mask'] = [name] * len(s) |
1338 | | - metadata['singular_value'] = s |
1339 | | - metadata['variance_explained'] = variance_explained |
1340 | | - metadata['cumulative_variance_explained'] = ( |
1341 | | - cumulative_variance_explained) |
1342 | | - metadata['retained'] = [i < num_components for i in range(len(s))] |
1343 | | - else: |
1344 | | - components = np.hstack((components, u[:, :num_components])) |
1345 | | - metadata['mask'] = metadata['mask'] + [name] * len(s) |
1346 | | - metadata['singular_value'] = ( |
1347 | | - np.hstack((metadata['singular_value'], s))) |
1348 | | - metadata['variance_explained'] = ( |
1349 | | - np.hstack((metadata['variance_explained'], |
1350 | | - variance_explained))) |
1351 | | - metadata['cumulative_variance_explained'] = ( |
1352 | | - np.hstack((metadata['cumulative_variance_explained'], |
1353 | | - cumulative_variance_explained))) |
1354 | | - metadata['retained'] = ( |
1355 | | - metadata['retained'] + [i < num_components for i in range(len(s))]) |
1356 | | - if components is None: |
| 1342 | + |
| 1343 | + components.append(u[:, :num_components]) |
| 1344 | + md_mask.append([name] * len(s)) |
| 1345 | + md_sv.append(s) |
| 1346 | + md_var.append(variance_explained) |
| 1347 | + md_cumvar.append(cumulative_variance_explained) |
| 1348 | + md_retained.append(i < num_components for i in range(len(s))) |
| 1349 | + |
| 1350 | + if len(components) > 0: |
| 1351 | + components = np.hstack(components) |
| 1352 | + else: |
1357 | 1353 | if failure_mode == 'error': |
1358 | 1354 | raise ValueError('No components found') |
1359 | | - components = np.full((M.shape[0], num_components), np.nan) |
| 1355 | + components = np.full((M.shape[0], num_components), |
| 1356 | + np.nan, dtype=np.float32) |
| 1357 | + |
| 1358 | + metadata = OrderedDict( |
| 1359 | + ('mask', list(chain(*md_mask))), |
| 1360 | + ('singular_value', np.hstack(md_sv)), |
| 1361 | + ('variance_explained', np.hstack(md_var)), |
| 1362 | + ('cumulative_variance_explained', np.hstack(md_cumvar)), |
| 1363 | + ('retained', list(chain(*md_retained))) |
| 1364 | + ) |
| 1365 | + |
1360 | 1366 | return components, basis, metadata |
1361 | 1367 |
|
1362 | 1368 |
|
|
0 commit comments