Skip to content

Commit ccd7453

Browse files
committed
FIX: Accept dtype parameter to ArrayProxy.__array__
1 parent fcc5448 commit ccd7453

File tree

4 files changed

+18
-8
lines changed

4 files changed

+18
-8
lines changed

nibabel/arrayproxy.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,8 +405,11 @@ def get_scaled(self, dtype=None):
405405
"""
406406
return self._get_scaled(dtype=dtype, slicer=())
407407

408-
def __array__(self):
409-
return self._get_scaled(dtype=None, slicer=())
408+
def __array__(self, dtype=None):
409+
arr = self._get_scaled(dtype=dtype, slicer=())
410+
if dtype is not None:
411+
arr = arr.astype(dtype, copy=False)
412+
return arr
410413

411414
def __getitem__(self, slicer):
412415
return self._get_scaled(dtype=None, slicer=slicer)

nibabel/ecat.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -689,15 +689,16 @@ def ndim(self):
689689
def is_proxy(self):
690690
return True
691691

692-
def __array__(self):
692+
def __array__(self, dtype=None):
693693
''' Read of data from file
694694
695695
This reads ALL FRAMES into one array, can be memory expensive.
696696
697697
If you want to read only some slices, use the slicing syntax
698698
(``__getitem__``) below, or ``subheader.data_from_fileobj(frame)``
699699
'''
700-
data = np.empty(self.shape)
700+
# dtype=None is interpreted as float64
701+
data = np.empty(self.shape, dtype=dtype)
701702
frame_mapping = get_frame_order(self._subheader._mlist)
702703
for i in sorted(frame_mapping):
703704
data[:, :, :, i] = self._subheader.data_from_fileobj(

nibabel/minc1.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,9 +290,12 @@ def get_scaled(self, dtype=None):
290290
"""
291291
return self._get_scaled(dtype=dtype, slicer=())
292292

293-
def __array__(self):
293+
def __array__(self, dtype=None):
294294
''' Read of data from file '''
295-
return self._get_scaled(dtype=None, slicer=())
295+
arr = self._get_scaled(dtype=dtype, slicer=())
296+
if dtype is not None:
297+
arr = arr.astype(dtype, copy=False)
298+
return arr
296299

297300
def __getitem__(self, sliceobj):
298301
""" Read slice `sliceobj` of data from file """

nibabel/parrec.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -699,8 +699,11 @@ def get_scaled(self, dtype=None):
699699
"""
700700
return self._get_scaled(dtype=dtype, slicer=())
701701

702-
def __array__(self):
703-
return self._get_scaled(dtype=None, slicer=())
702+
def __array__(self, dtype=None):
703+
arr = self._get_scaled(dtype=dtype, slicer=())
704+
if dtype is not None:
705+
arr = arr.astype(dtype, copy=False)
706+
return arr
704707

705708
def __getitem__(self, slicer):
706709
return self._get_scaled(dtype=None, slicer=slicer)

0 commit comments

Comments
 (0)