@@ -496,22 +496,24 @@ def slice_affine(self, idx):
496
496
"""
497
497
idx = canonical_slicers (idx , self .shape , check_inds = False )[:3 ]
498
498
499
- origin = np .array ([[0 ], [0 ], [0 ], [1 ]])
500
- scales = np .eye (3 , dtype = int )
501
-
502
- for i , slicer in enumerate (idx [:3 ]):
499
+ # Transform:
500
+ # sx 0 0 tx
501
+ # 0 sy 0 ty
502
+ # 0 0 sz tz
503
+ # 0 0 0 1
504
+ transform = np .eye (4 , dtype = int )
505
+
506
+ for i , slicer in enumerate (idx ):
503
507
if isinstance (slicer , slice ):
504
- origin [i ] = slicer .start or 0
505
- if slicer .step is not None :
506
- scales [i , i ] = slicer .step
508
+ if slicer .step == 0 :
509
+ raise ValueError ("slice step cannot be 0" )
510
+ transform [i , i ] = slicer .step if slicer .step is not None else 1
511
+ transform [i , 3 ] = slicer .start or 0
507
512
elif isinstance (slicer , int ):
508
- origin [ i ] = slicer
513
+ transform [ i , 3 ] = slicer
509
514
# If slicer is None, nothing to do
510
515
511
- affine = self .affine .copy ()
512
- affine [:3 , :3 ] = scales .dot (self .affine [:3 , :3 ])
513
- affine [:, [3 ]] = self .affine .dot (origin )
514
- return affine
516
+ return self .affine .dot (transform )
515
517
516
518
@property
517
519
def slicer (self ):
0 commit comments