File tree Expand file tree Collapse file tree 2 files changed +23
-3
lines changed Expand file tree Collapse file tree 2 files changed +23
-3
lines changed Original file line number Diff line number Diff line change @@ -547,7 +547,7 @@ def load(cls, filename):
547
547
return seq
548
548
549
549
550
- def create_arraysequences_from_generator (gen , n ):
550
+ def create_arraysequences_from_generator (gen , n , buffer_sizes = None ):
551
551
""" Creates :class:`ArraySequence` objects from a generator yielding tuples
552
552
553
553
Parameters
@@ -557,8 +557,13 @@ def create_arraysequences_from_generator(gen, n):
557
557
array sequences.
558
558
n : int
559
559
Number of :class:`ArraySequences` object to create.
560
+ buffer_sizes : list of float, optional
561
+ Sizes (in Mb) for each ArraySequence's buffer.
560
562
"""
561
- seqs = [ArraySequence () for _ in range (n )]
563
+ if buffer_sizes is None :
564
+ buffer_sizes = [4 ] * n
565
+
566
+ seqs = [ArraySequence (buffer_size = size ) for size in buffer_sizes ]
562
567
for data in gen :
563
568
for i , seq in enumerate (seqs ):
564
569
if data [i ].nbytes > 0 :
Original file line number Diff line number Diff line change @@ -372,8 +372,23 @@ def _read():
372
372
tractogram = LazyTractogram .from_data_func (_read )
373
373
374
374
else :
375
+
376
+ # Speed up loading by guessing a suitable buffer size.
377
+ with Opener (fileobj ) as f :
378
+ old_file_position = f .tell ()
379
+ f .seek (0 , os .SEEK_END )
380
+ size = f .tell ()
381
+ f .seek (old_file_position , os .SEEK_SET )
382
+
383
+ # Buffer size is in mega bytes.
384
+ mbytes = size // (1024 * 1024 )
385
+ sizes = [mbytes , 4 , 4 ]
386
+ if hdr ["nb_scalars_per_point" ] > 0 :
387
+ sizes = [mbytes // 2 , mbytes // 2 , 4 ]
388
+
375
389
trk_reader = cls ._read (fileobj , hdr )
376
- arr_seqs = create_arraysequences_from_generator (trk_reader , n = 3 )
390
+ arr_seqs = create_arraysequences_from_generator (trk_reader , n = 3 ,
391
+ buffer_sizes = sizes )
377
392
streamlines , scalars , properties = arr_seqs
378
393
properties = np .asarray (properties ) # Actually a 2d array.
379
394
tractogram = Tractogram (streamlines )
You can’t perform that action at this time.
0 commit comments